php文件上傳的步驟

檔案上傳的步驟

為了更好的學習PHP,我們將極為複雜的PHP的檔案上傳歸納總結成為了6個步驟。

在實際使用過程中,你依照這6個步驟就能夠很好的完成PHP的檔案上傳:

一、判斷是否有錯誤碼


#系統傳回的錯誤碼詳解:

找不到暫存資料夾,可能目錄不存在或沒權限
錯誤碼說明
0#無誤,可以繼續進行檔案上傳的後續操作。
1超出上傳檔案的最大限制,upload_max_filesize = 2M php.ini中設置,一般預設為2M。可依專案中的實際需求來修改
2超出了指定的檔案大小,根據專案的業務需求指定上傳檔案的大小限制
3只有部分檔案上傳
#4檔案沒有上傳
##6
#######7######檔案寫入失敗,可能磁碟滿了或沒有權限############


註:錯誤碼中沒有5。

二、自訂判斷是否超出檔案大小範圍

在開發上傳功能時。我們作為開發人員,除了php.ini中規定的上傳的最大值外。

我們通常也會設定一個值,是業務規定的上傳大小限制。

例如:
新浪微博或QQ空間只準單張頭像圖片2M。而在上傳圖冊的時候又可以超過2M來上傳。

所以說,它的系統是支援更大檔案上傳的。

此處的判斷檔案大小,我們用來限制實際業務中我們想要規定的上傳的檔案大小。

三、判斷字尾名和mime型別是否符合

在網路世界裡面也有壞人。他們會把圖片插入病毒,在附件中上傳病毒,他們會在網頁中插入病毒或黃色圖片。

我們需要對於上傳的檔案後綴和mime類型都要進行判斷才可以。

MIME(Multipurpose Internet Mail Extensions)是多用途互聯網郵件擴充類型。是設定某種副檔名的檔案用一種應用程式來開啟的方式類型,當該副檔名檔案被存取的時候,瀏覽器會自動使用指定應用程式來開啟。多用於指定一些客戶端自訂的檔案名,以及一些媒體檔案開啟方式。

在判斷後綴和MIME類型的時候,我們會用到PHP的一個函數in_array(),該函數傳入兩個參數。
第一個參數是要判斷的值;
第二個參數是範圍陣列。

我們用這個函數來判斷檔案的後綴名稱和mime類型是否在允許的範圍內。

四、產生檔名

我們的檔案上傳成功了,不會讓它儲存原名。
因為,有些人在原名中有敏感關鍵字會違反我國的相關法律和法規。

我們可以採用date()、mt_rand()或unique()產生隨機的檔案名稱。

五、判斷是否是上傳檔案

檔案上傳成功時,系統會將上傳的暫存檔案上傳到系統的暫存目錄中。產生一個臨時文件。

同時會產生暫存檔案名稱。我們需要做的事情是將臨時檔案移到系統的指定目錄中。

而移動前不能瞎移動,或是移動錯了都是不科學的。移動前我們需要使用相關函數判斷上傳的檔案是不是暫存檔案。

is_uploaded_file()傳入一個參數($_FILES中的快取檔案名稱),判斷傳入的名稱是不是上傳檔案。

六、移動臨時文件到指定位置

臨時文件是真實的臨時文件,我們需要將其移動到我們的網站目錄下面了。

讓我們網站目錄的數據,其他人可以存取。

我們使用:move_uploaded_file()。
這個函數是將上傳檔案移到指定位置,並命名。
傳入兩個參數:
第一個參數是指定移動的上傳檔案;
第二個參數是指定的資料夾和名稱拼接的字串。


繼續學習
||
<form action="" enctype="multipart/form-data" method="post" name="uploadfile">上传文件:<input type="file" name="upfile" /><br> <input type="submit" value="上传" /></form> <?php //print_r($_FILES["upfile"]); if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ $upfile=$_FILES["upfile"]; //获取数组里面的值 $name=$upfile["name"];//上传文件的文件名 $type=$upfile["type"];//上传文件的类型 $size=$upfile["size"];//上传文件的大小 $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 //判断是否为图片 switch ($type){ case 'image/pjpeg':$okType=true; break; case 'image/jpeg':$okType=true; break; case 'image/gif':$okType=true; break; case 'image/png':$okType=true; break; } if($okType){ /** * 0:文件上传成功<br/> * 1:超过了文件大小,在php.ini文件中设置<br/> * 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/> * 3:文件只有部分被上传<br/> * 4:没有文件被上传<br/> * 5:上传文件大小为0 */ $error=$upfile["error"];//上传后系统返回的值 echo "================<br/>"; echo "上传文件名称是:".$name."<br/>"; echo "上传文件类型是:".$type."<br/>"; echo "上传文件大小是:".$size."<br/>"; echo "上传后系统返回的值是:".$error."<br/>"; echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; echo "开始移动上传文件<br/>"; //把上传的临时文件移动到up目录下面 move_uploaded_file($tmp_name,'up/'.$name); $destination="up/".$name; echo "================<br/>"; echo "上传信息:<br/>"; if($error==0){ echo "文件上传成功啦!"; echo "<br>图片预览:<br>"; echo "<img src=".$destination.">"; //echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; }elseif ($error==1){ echo "超过了文件大小,在php.ini文件中设置"; }elseif ($error==2){ echo "超过了文件的大小MAX_FILE_SIZE选项指定的值"; }elseif ($error==3){ echo "文件只有部分被上传"; }elseif ($error==4){ echo "没有文件被上传"; }else{ echo "上传文件大小为0"; } }else{ echo "请上传jpg,gif,png等格式的图片!"; } } ?>