① 怎麼用php做一個文件上傳代碼實例
<?php
/**
file:fileupload.class.php文件上傳類FileUpload
本類的實例對象用於處理上傳文件,可以上傳一個文件,也可同時處理多個文件上傳
*/
classFileUpload{
private$path="./uploads";//上傳文件保存的路徑
private$allowtype=array('jpg','gif','png');//設置限制上傳文件的類型
private$maxsize=1000000;//限制文件上傳大小(位元組)
private$israndname=true;//設置是否隨機重命名文件,false不隨機
private$originName;//源文件名
private$tmpFileName;//臨時文件名
private$fileType;//文件類型(文件後綴)
private$fileSize;//文件大小
private$newFileName;//新文件名
private$errorNum=0;//錯誤號
private$errorMess="";//錯誤報告消息
/**
*用於設置成員屬性($path,$allowtype,$maxsize,$israndname)
*可以通過連貫操作一次設置多個屬性值
*@paramstring$key成員屬性名(不區分大小寫)
*@parammixed$val為成員屬性設置的值
*@returnobject返回自己對象$this,可以用於連貫操作
*/
functionset($key,$val){
$key=strtolower($key);
if(array_key_exists($key,get_class_vars(get_class($this)))){
$this->setOption($key,$val);
}
return$this;
}
/**
*調用該方法上傳文件
*@paramstring$fileFile上傳文件的表單名稱
*@returnbool如果上傳成功返回數true
*/
functionupload($fileField){
$return=true;
/*檢查文件路徑是滯合法*/
if(!$this->checkFilePath()){
$this->errorMess=$this->getError();
returnfalse;
}
/*將文件上傳的信息取出賦給變數*/
$name=$_FILES[$fileField]['name'];
$tmp_name=$_FILES[$fileField]['tmp_name'];
$size=$_FILES[$fileField]['size'];
$error=$_FILES[$fileField]['error'];
/*如果是多個文件上傳則$file["name"]會是一個數組*/
if(is_Array($name)){
$errors=array();
/*多個文件上傳則循環處理,這個循環只有檢查上傳文件的作用,並沒有真正上傳*/
for($i=0;$i<count($name);$i++){
/*設置文件信息*/
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->checkFileSize()||!$this->checkFileType()){
$errors[]=$this->getError();
$return=false;
}
}else{
$errors[]=$this->getError();
$return=false;
}
/*如果有問題,則重新初使化屬性*/
if(!$return)
$this->setFiles();
}
if($return){
/*存放所有上傳後文件名的變數數組*/
$fileNames=array();
/*如果上傳的多個文件都是合法的,則通過銷魂循環向伺服器上傳文件*/
for($i=0;$i<count($name);$i++){
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
$this->setNewFileName();
if(!$this->File()){
$errors[]=$this->getError();
$return=false;
}
$fileNames[]=$this->newFileName;
}
}
$this->newFileName=$fileNames;
}
$this->errorMess=$errors;
return$return;
/*上傳單個文件處理方法*/
}else{
/*設置文件信息*/
if($this->setFiles($name,$tmp_name,$size,$error)){
/*上傳之前先檢查一下大小和類型*/
if($this->checkFileSize()&&$this->checkFileType()){
/*為上傳文件設置新文件名*/
$this->setNewFileName();
/*上傳文件返回0為成功,小於0都為錯誤*/
if($this->File()){
returntrue;
}else{
$return=false;
}
}else{
$return=false;
}
}else{
$return=false;
}
//如果$return為false,則出錯,將錯誤信息保存在屬性errorMess中
if(!$return)
$this->errorMess=$this->getError();
return$return;
}
}
/**
*獲取上傳後的文件名稱
*@paramvoid沒有參數
*@returnstring上傳後,新文件的名稱,如果是多文件上傳返回數組
*/
publicfunctiongetFileName(){
return$this->newFileName;
}
/**
*上傳失敗後,調用該方法則返回,上傳出錯信息
*@paramvoid沒有參數
*@returnstring返回上傳文件出錯的信息報告,如果是多文件上傳返回數組
*/
publicfunctiongetErrorMsg(){
return$this->errorMess;
}
/*設置上傳出錯信息*/
privatefunctiongetError(){
$str="上傳文件<fontcolor='red'>{$this->originName}</font>時出錯:";
switch($this->errorNum){
case4:$str.="沒有文件被上傳";break;
case3:$str.="文件只有部分被上傳";break;
case2:$str.="上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值";break;
case1:$str.="上傳的文件超過了php.ini中upload_max_filesize選項限制的值";break;
case-1:$str.="未允許類型";break;
case-2:$str.="文件過大,上傳的文件不能超過{$this->maxsize}個位元組";break;
case-3:$str.="上傳失敗";break;
case-4:$str.="建立存放上傳文件目錄失敗,請重新指定上傳目錄";break;
case-5:$str.="必須指定上傳文件的路徑";break;
default:$str.="未知錯誤";
}
return$str.'<br>';
}
/*設置和$_FILES有關的內容*/
privatefunctionsetFiles($name="",$tmp_name="",$size=0,$error=0){
$this->setOption('errorNum',$error);
if($error)
returnfalse;
$this->setOption('originName',$name);
$this->setOption('tmpFileName',$tmp_name);
$aryStr=explode(".",$name);
$this->setOption('fileType',strtolower($aryStr[count($aryStr)-1]));
$this->setOption('fileSize',$size);
returntrue;
}
/*為單個成員屬性設置值*/
privatefunctionsetOption($key,$val){
$this->$key=$val;
}
/*設置上傳後的文件名稱*/
privatefunctionsetNewFileName(){
if($this->israndname){
$this->setOption('newFileName',$this->proRandName());
}else{
$this->setOption('newFileName',$this->originName);
}
}
/*檢查上傳的文件是否是合法的類型*/
privatefunctioncheckFileType(){
if(in_array(strtolower($this->fileType),$this->allowtype)){
returntrue;
}else{
$this->setOption('errorNum',-1);
returnfalse;
}
}
/*檢查上傳的文件是否是允許的大小*/
privatefunctioncheckFileSize(){
if($this->fileSize>$this->maxsize){
$this->setOption('errorNum',-2);
returnfalse;
}else{
returntrue;
}
}
/*檢查是否有存放上傳文件的目錄*/
privatefunctioncheckFilePath(){
if(empty($this->path)){
$this->setOption('errorNum',-5);
returnfalse;
}
if(!file_exists($this->path)||!is_writable($this->path)){
if(!@mkdir($this->path,0755)){
$this->setOption('errorNum',-4);
returnfalse;
}
}
returntrue;
}
/*設置隨機文件名*/
privatefunctionproRandName(){
$fileName=date('YmdHis')."_".rand(100,999);
return$fileName.'.'.$this->fileType;
}
/*復制上傳文件到指定的位置*/
privatefunctionFile(){
if(!$this->errorNum){
$path=rtrim($this->path,'/').'/';
$path.=$this->newFileName;
if(@move_uploaded_file($this->tmpFileName,$path)){
returntrue;
}else{
$this->setOption('errorNum',-3);
returnfalse;
}
}else{
returnfalse;
}
}
}
② PHP文件上傳代碼用法
php文件上傳代碼編寫過程
先判斷是否上傳文件
如果有再來判斷上傳中是否出錯
如果出錯 則提示出錯信息
如查沒出錯 再判斷文件類型
如果類型符合條件 再判斷指定目錄中有沒有存在該文件
如果沒有就把該文件移至指定目錄
在php中上傳文件必須知道的幾個東西
$_FILES[ myfile ][ name ] 是指被上傳文件的名稱
$_FILES[ myfile ][ type ] 是指被上傳文件的類型
$_FILES[ myfile ][ size ] 是指被上傳文件的大小 單位為位元組(B)
$_FILES[ myfile ][ tmp_name ] 是指被上傳文件存在伺服器中的臨時副本文件名稱 文件被移動到指定目錄後臨文件將被自動消毀
$_FILES[ myfile ]["error"] 是指由文件上傳中有可能出現的錯誤的狀態碼 關於各狀態含義後在會說明
先來看一下HTML部分
代碼如下 復制代碼?<form action="upload php" method="post" enctype="multipart/form data"> 上傳 <input type=file name=myfile /> <input type=submit name=submit value="上傳" /> </form>
說明
form標答的action="upload php"是指點擊這個form中的submit的時候 這個上傳命令會被發送到這個叫 upload php的頁面去處理 method="post"是指以post方式去送 enctype="multipart/form data"屬性規定了在提交這個表單時要使用哪種內容類型 在表單需要二進制數據時 比如文件內容 請使用"multipart/form data" 如果要上傳文件 這個屬性是必要的 input中的type="file"時 規定了應該把輸入作為文件來處理 並且在input後面會有一個瀏覽的按鈕
我們再來看一個PHP處理頁面 upload php
代碼如下 復制代碼<?php if($_FILES[ myfile ][ name ] != ) { if($_FILES[ myfile ][ error ] > ) { echo "錯誤狀態 " $_FILES[ myfile ][ error ]; } else { move_uploaded_file($_FILES[ myfile ][ tmp_name ] "uploads/" $FILES[ myfile ][ name ]); echo "<script>alert(上傳成功!);</script>"; } } else{ echo "<script>alert(請上傳文件!);</script>"; } ?>
上面超級簡單 我們現在來升級一下
upload php
代碼如下 復制代碼<!DOCTYPE HTML PUBLIC " //W C//DTD HTML Transitional//EN"> <> <head> <title>ddd</title> <meta equiv="content type" content="text/; charset=UTF "> </head> <body> <! 文件上傳要注意: 要有enctyp method="post" > <form enctype="multipart/form data" action="uploadProcess php" method="post" > <table> <tr><td>請填寫用戶名</td><td><input type=text name=username></td></tr> <tr><td>請簡單介紹文件</td><td><textarea rows=" " cols=" " name=fileintro class="page_speeder_734321457"></textarea></td></tr> <tr><td>請上傳你的文件</td><td><input type=file name=myfile></td></tr> <tr><td colspan=" "><input type=submit value="上傳"><td></tr> </table> </form> </body> </>
uploadProcess php
代碼如下 復制代碼<?php
//接收 $username=$_POST[ username ]; $fileintro=$_POST[ fileintro ]; //echo $username $fileintro; //獲取文件信息 /* echo "<pre>"; print_r($_FILES); echo "</pre>"; */ //獲取文件的大小 $file_size=$_FILES[ myfile ][ size ]; if($file_size> * * ){ echo "<script type= text/javascript >window alert( 文件不能大於 M )</script>"; exit(); }
//獲取文件類型 $file_type=$_FILES[ myfile ][ type ]; if($file_type!="image/jpeg" && $file_type!="image/pjpeg"){ echo "文件類型只能是 jpg 格式"; exit(); }
//判斷上傳是否OK if(is_uploaded_file($_FILES[ myfile ][ tmp_name ])){ //得到上傳的文件 轉存到你希望的目錄 $upload_file=$_FILES[ myfile ][ tmp_name ]; //防止圖片覆蓋問題 為每個用戶建立一個文件夾 $user_path=$_SERVER[ DOCUMENT_ROOT ] "/file/up/" $username; if(!file_exists($user_path)){ mkdir ($user_path); }
//$move_to_file=$user_path "/" $_FILES[ myfile ][ name ]; //防止用戶上傳用戶名相同的問題 $file_true_name=$_FILES[ myfile ][ name ]; $move_to_file=$user_path "/" time() rand( ) substr($file_true_name strripos($file_true_name " "));
//echo $upload_file $move_to_file; //中文要轉碼 if(move_uploaded_file($upload_file iconv("utf " "gb " "$move_to_file"))){ echo $_FILES[ myfile ][ name ] "上傳成功"; }else{ echo "上傳失敗"; } }else{ echo "上傳失敗"; }
?>
注意:
我舉個例子大家就知道 比如一個圖片文件 pic jpg 我們用 strrchr處理 strrchr(pic jpg ) 它將返回 jpg 明白了嗎?該函數返回指定字元在該字元串最後出現的位置後的字元 配合 substr() 我們就可以取到jpg 這樣我們就得到了文件的後綴名 來判斷上傳文件是否符合指定格式 本程序把指定的格式放在一個數組中 實際使用時可根據需要添加
lishixin/Article/program/PHP/201311/20924
③ 求實現php文件上傳代碼
PHP上傳文件非常簡單,你需要一個上傳的HTML文件(<FORM>),一個保存文件的PHP文件(保存),一個查詢上傳文件清單的工具。
真正實現完整功能的上傳和管理需要使用資料庫,我的網站俱樂部裡面上傳文件一開放很快就傳了幾萬個文件。
最簡單的方法不用資料庫,可以用一個PHP文件實現,這個文件列出指定目錄下的所有文件,然後提供一個上傳的FORM,最後檢測是否提交了FORM數據,是就保存文件到指定位置。
PHP手冊第39章有關於處理這些問題的說明,我復制粘貼如下:
上一頁V.特點下一頁
--------------------------------------------------------------------------------
第39章文件上傳處理
目錄
POST方法上傳
錯誤信息說明
常見缺陷
上傳多個文件
對PUT方法的支持
POST方法上傳
本特性可以使用戶上傳文本和二進制文件。用PHP的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳後怎樣處理。
PHP能夠接受任何來自符合RFC-1867標準的瀏覽器(包括NetscapeNavigator3及更高版本,打了補丁的MicrosoftInternetExplorer3或者更高版本)上傳的文件。
相關的設置:請參閱php.ini的file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size以及max_input_time設置選項。
請注意PHP也支持PUT方法的文件上傳,NetscapeComposer和W3C的Amaya客戶端使用這種方法。請參閱對PUT方法的支持以獲取更多信息。
例39.1.文件上傳表單
可以如下建立一個特殊的表單來支持文件上傳:<!--Thedataencodingtype,enctype,MUSTbespecifiedasbelow-->
<formenctype="multipart/form-data"action="__URL__"method="POST">
<!--MAX_FILE_-->
<inputtype="hidden"name="MAX_FILE_SIZE"value="30000"/>
<!--$_FILESarray-->
Sendthisfile:<inputname="userfile"type="file"/>
<inputtype="submit"value="SendFile"/>
</form>
以上範例中的__URL__應該被換掉,指向一個真實的PHP文件。
MAX_FILE_SIZE隱藏欄位(單位為位元組)必須放在文件輸入欄位之前,其值為接收文件的最大尺寸。這是對瀏覽器的一個建議,PHP也會檢查此項。在瀏覽器端可以簡單繞過此設置,因此不要指望用此特性來阻擋大文件。實際上,PHP設置中的上傳文件最大值是不會失效的。但是最好還是在表單中加上此項目,因為它可以避免用戶在花時間等待上傳大文件之後才發現文件過大上傳失敗的麻煩。
注意:要確保文件上傳表單的屬性是enctype="multipart/form-data",否則文件上傳不了。
全局變數$_FILES自PHP4.1.0起存在(在更早的版本中用$HTTP_POST_FILES替代)。此數組包含有所有上傳的文件信息。
以上範例中$_FILES數組的內容如下所示。我們假設文件上傳欄位的名稱如上例所示,為userfile。名稱可隨意命名。
$_FILES['userfile']['name']
客戶端機器文件的原名稱。
$_FILES['userfile']['type']
文件的MIME類型,如果瀏覽器提供此信息的話。一個例子是「image/gif」。不過此MIME類型在PHP端並不檢查,因此不要想當然認為有這個值。
$_FILES['userfile']['size']
已上傳文件的大小,單位為位元組。
$_FILES['userfile']['tmp_name']
文件被上傳後在服務端儲存的臨時文件名。
$_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。此項目是在PHP4.2.0版本中增加的。
文件被上傳後,默認地會被儲存到服務端的默認臨時目錄中,除非php.ini中的upload_tmp_dir設置為其它的路徑。服務端的默認臨時目錄可以通過更改PHP運行環境的環境變數TMPDIR來重新設置,但是在PHP腳本內部通過運行putenv()函數來設置是不起作用的。該環境變數也可以用來確認其它的操作也是在上傳的文件上進行的。
例39.2.使文件上傳生效
請查閱函數is_uploaded_file()和move_uploaded_file()以獲取進一步的信息。以下範例處理由表單提供的文件上傳。
<?php
//InPHPversionsearlierthan4.1.0,$HTTP_POST_FILESshouldbeusedinstead
//of$_FILES.
$uploaddir='/var/www/uploads/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
echo'<pre>';
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
echo"Fileisvalid,andwassuccessfullyuploaded.\n";
}else{
echo"Possiblefileuploadattack!\n";
}
echo'Hereissomemoredebugginginfo:';
print_r($_FILES);
print"</pre>";
?>
接受上傳文件的PHP腳本為了決定接下來要對該文件進行哪些操作,應該實現任何邏輯上必要的檢查。例如可以用$_FILES['userfile']['size']變數來排除過大或過小的文件,也可以通過$_FILES['userfile']['type']變數來排除文件類型和某種標准不相符合的文件,但只把這個當作一系列檢查中的第一步,因為此值完全由客戶端控制而在PHP端並不檢查。自PHP4.2.0起,還可以通過$_FILES['userfile']['error']變數來根據不同的錯誤代碼來計劃下一步如何處理。不管怎樣,要麼將該文件從臨時目錄中刪除,要麼將其移動到其它的地方。
如果表單中沒有選擇上傳的文件,則PHP變數$_FILES['userfile']['size']的值將為0,$_FILES['userfile']['tmp_name']將為空。
如果該文件沒有被移動到其它地方也沒有被改名,則該文件將在表單請求結束時被刪除。
例39.3.上傳一組文件
PHP的HTML數組特性甚至支持文件類型。
<formaction=""method="post"enctype="multipart/form-data">
<p>Pictures:
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="submit"value="Send"/>
</p>
</form>
<?php
foreach($_FILES["pictures"]["error"]as$key=>$error){
if($error==UPLOAD_ERR_OK){
$tmp_name=$_FILES["pictures"]["tmp_name"][$key];
$name=$_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name,"data/$name");
}
}
?>
--------------------------------------------------------------------------------
上一頁上一級下一頁
38.處理XForms起始頁錯誤信息說明
④ 關於php實現文件上傳
php的文件上傳機制是把用戶上傳的文件保存在php.ini的upload_tmp_dir定義的臨時目錄(默認是系統的臨時目錄,如:/tmp)里的一個類似phpxXuoXG的隨機臨時文件,程序執行結束,該臨時文件也被刪除。PHP給上傳的文件定義了四個變數:(如form變數名是file,而且register_globals打開)
$file #就是保存到伺服器端的臨時文件(如/tmp/phpxXuoXG )
$file_size #上傳文件的大小
$file_name #上傳文件的原始名稱
$file_type #上傳文件的類型
推薦使用:
$_FILES['file']['tmp_name']
$_FILES['file']['size']
$_FILES['file']['name']
$_FILES['file']['type']
⑤ 怎樣用PHP實現文件上傳
創建一個文件上傳表單
允許用戶從表單上傳文件是非常有用的。
請看下面這個供上傳文件的 HTML 表單:
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
請留意如下有關此表單的信息:
<form> 標簽的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比如文件內容,請使用 "multipart/form-data"。
<input> 標簽的 type="file" 屬性規定了應該把輸入作為文件來處理。舉例來說,當在瀏覽器中預覽時,會看到輸入框旁邊有一個瀏覽按鈕。
注釋:允許用戶上傳文件是一個巨大的安全風險。請僅僅允許可信的用戶執行文件上傳操作。
創建上傳腳本
"upload_file.php" 文件含有供上傳文件的代碼:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
通過使用 PHP 的全局數組 $_FILES,你可以從客戶計算機向遠程伺服器上傳文件。
第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:
$_FILES["file"]["name"] - 被上傳文件的名稱
$_FILES["file"]["type"] - 被上傳文件的類型
$_FILES["file"]["size"] - 被上傳文件的大小,以位元組計
$_FILES["file"]["tmp_name"] - 存儲在伺服器的文件的臨時副本的名稱
$_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼
這是一種非常簡單文件上傳方式。基於安全方面的考慮,您應當增加有關什麼用戶有權上傳文件的限制。
上傳限制
在這個腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 或 .jpeg 文件,文件大小必須小於 20 kb:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
注釋:對於 IE,識別 jpg 文件的類型必須是 pjpeg,對於 FireFox,必須是 jpeg。
保存被上傳的文件
上面的例子在伺服器的 PHP 臨時文件夾創建了一個被上傳文件的臨時副本。
這個臨時的復制文件會在腳本結束時消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。
注釋:這個例子把文件保存到了名為 "upload" 的新文件夾。
⑥ php 上傳文件
剛學php時寫的一個類,可以給你參考下,你所說的功能基本上也都有。
這個用作學習還是不錯的。
<?php
classfileup{
private$savefilepath;//保存路徑
private$filetype=array('gif','jpg','jpeg','png');//文件類型
private$maxsize=1000000;//上傳最大的尺寸默認值設置為1M
private$savename=true;//是否默認隨機名稱
private$upfileform;//上傳文件表單的name值
//以下是不可以修改的成員屬性
private$tmpname;//上傳的臨時文件名
private$upfilename;//上傳文件的名稱
private$uperror;
private$newname;//新的文件名
//private$upfiletype;//上傳文件的類型
private$upfilesize;//上傳文件的大小。
private$filehz;//文件名的擴展名。
//構造方法
function__construct($upfileform,$savefilepath='./upload/'){
$this->upfileform=$upfileform;
$this->savefilepath=rtrim($savefilepath,'/');
$this->tmpname=$_FILES[$upfileform]['tmp_name'];
$this->upfilename=$_FILES[$upfileform]['name'];
$this->upfilesize=$_FILES[$upfileform]['size'];
$this->uperror=$_FILES[$upfileform]['error'];
$this->getnewname();
}
//設置文件上傳的參數,不設置為默認值。
functionsetfilepar($par){
$pars=array('filetype','maxsize','savename');
foreach($paras$key=>$value){
if(in_array($key,$pars)){
$this->$key=$value;
}else{
continue;
}
}
}
//檢查上傳
privatefunctioncheckfileup(){
//判斷文件夾是否正確或文件夾是否有可寫入的許可權。
if(!is_dir($this->savefilepath)||!is_writable($this->savefilepath)){
$this->uperror=8;
returnfalse;
}
//判斷文件名是否存在
if(is_file($this->newname)){
$this->uperror=9;
returnfalse;
}
//判斷上傳文件的類型是否正確。
if(!in_array(strtolower($this->filehz),$this->filetype)){
$this->uperror=-1;
returnfalse;
}
returntrue;
}
//獲取新的文件名字
privatefunctiongetnewname(){
$tmp=explode('.',$this->upfilename);
$this->filehz=$tmp[count($tmp)-1];
if(is_bool($this->savename)){
if($this->savename){
$this->newname=$this->savefilepath.'/'.date('YmdHis').rand(10000,99999).'.'.$this->filehz;
}else{
$this->newname=$this->savefilepath.'/'.$this->upfilename;
}
}else{
$this->newname=$this->savefilepath.'/'.$this->savename.'.'.$this->filehz;
}
}
//獲取錯誤信息
privatefunctiongetuperror(){
switch($this->uperror){
case1:echo'上傳文件超過了系統指定的大小';break;
case2:echo'上傳文件超過了表單中指定的大小';break;
case3:echo'文件只有部分上傳';break;
case4:echo'沒有文件上傳';break;
case6:echo'找不到上傳的文件,系統錯誤';break;
case7:echo'文件寫入失敗';break;
case8:echo'文件路徑不存在,或不可寫';break;
case9:echo'文件名已經存在,請不要重復上傳';break;
case-1:echo'不是指定上傳的文件';break;
case-2:echo'請勿使用非法途徑上傳';break;
case-3:echo'文件上傳失敗';break;
default:'未知錯誤';break;
}
}
functionfileupload(){
if(!$this->checkfileup()||$this->uperror!=0){
$this->getuperror();
returnfalse;
}else{
if(!is_uploaded_file($_FILES[$this->upfileform]['tmp_name'])){
$this->uperror=-2;
$this->getuperror();
returnfalse;
}else{
if(move_uploaded_file($_FILES[$this->upfileform]['tmp_name'],$this->newname)){
returntrue;
}else{
$this->uperror=-3;
returnfalse;
}
}
}
}
//獲取文件名
functiongetname(){
return$this->newname;
}
}
⑦ 求PHP網頁上傳文件代碼.
自定義文件上傳函數
:
<?php
/**
* 文件上傳
*/
/**
* 文件上傳函數
* @param $name string 表單上傳框的name值
* @param $file_arr array 上傳文件的類型限制
* @param $filesize int 上傳文件限制其大小
* @param $path string 文件的保存路徑
* @return string 成功返回 "上傳成功及文件名"
*/
function uploads($name,$file_arr=array('jpg','png','gif','JPG','GIF','PNG'),$filesize=3145728,$path='uploads'){
//1、檢測文件的錯誤信息,如果是0 就允許上傳(保存)
$err=$_FILES[$name]['error'];
if($err>0){
if($err==1){
return '上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。';
}elseif($err==2){
return '上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 ';
}elseif($err==3){
return '文件只有部分被上傳。';
}elseif($err==4){
return'沒有文件上傳';
}elseif($err>=5){
return '其他錯誤';
}
}
//2、檢測文件的類型,是否是我們需要的(png、gif、jpg)
$pre=pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);
if(!in_array($pre,$file_arr)){
return '上傳的文件類型不符';
}
//3、檢測文件大小
if($_FILES[$name]['size']>$filesize){
return '上傳的文件太大';
}
//4、保存文件
$file_name=date('YmdHis',time()).mt_rand(1000,9999).'.'.$pre;
if(is_uploaded_file($_FILES[$name]['tmp_name'])){
move_uploaded_file($_FILES[$name]['tmp_name'], $path."/".$file_name);
return '上傳成功|'.$file_name;
}else{
return "文件上傳失敗!";
}
}
?>