您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關PHP中文件上傳、客戶端和服務器端加限制、抓取錯誤信息的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
文件上傳分為兩個部分,HTML顯示部分和PHP處理部分,HTML部分主要是讓用戶來選擇所要上傳的文件,然后通過PHP中的$_FILES,我們可以把文件上傳到服務器的指定目錄。
1.客戶端頁面
客戶端的配置
1.表單頁面
2.表單發送方式為post
3.表單form中添加enctype="multipart/form-data"
<body> <form action="doaction.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="上傳"> </form> </body>
2.處理頁面doaction
$_FILES:文件上傳變量
print_r($_FILES);
$_FILES:保存著上傳文件的信息
1.name:上傳文件的名稱
2.type:上傳文件的MIME類型
3.tmp_name:上傳到服務器上的臨時文件名
4.size:上傳文件的大小
5.error:上傳文件的錯誤號
$filename=$_FILES['myfile']['name']; $type=$_FILES['myfile']['type']; $tmp_name=$_FILES['myfile']['tmp_name']; $size=$_FILES['myfile']['size']; $error=$_FILES['myfile']['error'];
將服務器上的臨時文件移動到指定文件夾
1.move_uploaded_file(臨時文件名,‘文件夾名'.$filename); 將服務器上的臨時文件移動到指定文件夾,叫什么名字($filename),移動成功返回true,移動失敗返回false。
move_uploaded_file($tmp_name,"wenjian/".$filename);
2.copy("臨時文件名","文件名".$filename) 將服務器上的臨時文件拷貝到指定文件夾
文件上傳配置
file_uploads = on,支持HTTP上傳 upload_tmp_dir= ,臨時文件保存的目錄 upload_max_filesize=2M,允許上傳文件的最大值 max_file_uploads=20,允許一次上傳的最大文件數 post_max_size=8M,post方式發送數據的最大值
3.錯誤信息處理
上傳文件失敗時,判斷一下錯誤號,只有為0或者UPLOAD_ERR_OK,才沒有錯誤發生,上傳成功
下面是抓取錯誤
if($error==UPLOAD_ERR_OK) { if(move_uploaded_file($tmp_name,"wenjian/".$filename)) { echo "文件".$filename."上傳成功"; }else { echo "文件".$filename."上傳失敗"; } } else { //匹配錯誤信息 switch($error) { case 1: echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值"; break; case 2: echo "超過了表單MAX_FILE_SIZE的限制大小"; break; case 3: echo "文件部分被上傳"; break; case 4: echo "沒有選擇上傳文件"; break; case 6: echo "沒有找到臨時目錄"; break; case 7: case 8: echo "系統錯誤"; break; } } ?>
4.上傳文件限制
《客戶端限制:》
通過表單隱藏域限制上傳文件的最大值
<input type="hidden" name="MAX_FILE_SIZE" value="字節數">
通過accept屬性限制上傳文件的類型
<input type="file" name="myfile" accept="文件的MIME類型">
《服務器端限制》
1.限制上傳文件大小
2.限制上傳文件類型
3.檢測是否為真實圖片類型
4.檢測是否為HTTP POST方式上傳
5.判斷服務器上存儲的文件夾在不在
6.防止重名產生覆蓋
<?php $fileinfo=$_FILES["myfile"]; $maxsize=2097152; //寫最大的字節數,自己算 $allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定義一下允許的上傳文件類型 //1.判斷錯誤號 if($fileinfo['error']==0) { //1.判斷上傳文件大小 if($fileinfo['size']>$maxsize) { exit('上傳文件過大'); } //2.判斷上傳文件類型是不是在規定類型中 $ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上傳文件擴展名 if(!in_array($ext,$allowext)) // 判斷上傳文件的擴展名是不是在定義類型中 { exit('非法文件類型'); } //3.判斷文件是否是通過HTTP POST方式上傳上來的 if(!is_uploaded_file($fileinfo['tmp_name'])) { exit('文件不是通過HTTP POST方式上傳上來的'); } //4.檢測是否為真實的圖片類型,而不是認為改動的 $flag=true; if($flag) { if(!getimagesize($fileinfo['tmp_name'])) { echo "不是真實的圖片類型"; } } $path='uploads'; //服務器上存儲文件的文件名 //5.判斷服務器上存儲的文件夾在不在 if(!file_exists($path)) { mkdir($path,0777,true);//不存在就創建一個目錄 chmod($path,0777);//加一個權限 } //6.確保文件名唯一,防止重名產生覆蓋 $uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通過MD5加密等措施給文件名取名 $destination=$path.'/'.$uniname; if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上傳文件 { echo "文件上傳成功"; }else { echo "文件上傳失敗"; } }else { //匹配錯誤信息 switch($error) { case 1: echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值"; break; case 2: echo "超過了表單MAX_FILE_SIZE的限制大小"; break; case 3: echo "文件部分被上傳"; break; case 4: echo "沒有選擇上傳文件"; break; case 6: echo "沒有找到臨時目錄"; break; case 7: case 8: echo "系統錯誤"; break; } } ?>
5.完整的上傳文件步驟
第一步:表單頁內容
<body> <form action="doaction.php" method="post" enctype="multipart/form-data"> //通過表單隱藏域限制上傳文件的最大值 <input type="hidden" name="MAX_FILE_SIZE" value="字節數"> //通過accept屬性限制上傳文件的類型 <input type="file" name="myfile" accept="文件的MIME類型"> </form> </body>
第二步:處理界面。定義變量
<?php //$_FILES:文件上傳變量 print_r($_FILES); //$_FILES:保存著上傳文件的信息 /*1.name:上傳文件的名稱 2.type:上傳文件的MIME類型 3.tmp_name:上傳到服務器上的臨時文件名 4.size:上傳文件的大小 5.error:上傳文件的錯誤號*/ $filename=$_FILES['myfile']['name']; $type=$_FILES['myfile']['type']; $tmp_name=$_FILES['myfile']['tmp_name']; $size=$_FILES['myfile']['size']; $error=$_FILES['myfile']['error'];
第三步:處理頁面上服務器加限制和輸出錯誤信息
1.限制上傳文件大小
2.限制上傳文件類型
3.檢測是否為真實圖片類型
4.檢測是否為HTTP POST方式上傳
5.判斷服務器上存儲的文件夾在不在
6.防止重名產生覆蓋
//服務器端限制 <?php $fileinfo=$_FILES["myfile"]; $maxsize=2097152; //寫最大的字節數,自己算 $allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定義一下允許的上傳文件類型 //1.判斷錯誤號 if($fileinfo['error']==0) { //1.判斷上傳文件大小 if($fileinfo['size']>$maxsize) { exit('上傳文件過大'); } //2.判斷上傳文件類型是不是在規定類型中 $ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上傳文件擴展名 if(!in_array($ext,$allowext)) // 判斷上傳文件的擴展名是不是在定義類型中 { exit('非法文件類型'); } //3.判斷文件是否是通過HTTP POST方式上傳上來的 if(!is_uploaded_file($fileinfo['tmp_name'])) { exit('文件不是通過HTTP POST方式上傳上來的'); } //4.檢測是否為真實的圖片類型,而不是認為改動的 $flag=true; if($flag) { if(!getimagesize($fileinfo['tmp_name'])) { echo "不是真實的圖片類型"; } } $path='uploads'; //服務器上存儲文件的文件名 //5.判斷服務器上存儲的文件夾在不在 if(!file_exists($path)) { mkdir($path,0777,true);//不存在就創建一個目錄 chmod($path,0777);//加一個權限 } //6.確保文件名唯一,防止重名產生覆蓋 $uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通過MD5加密等措施給文件名取名 $destination=$path.'/'.$uniname; $destination=inocv("UTF-8","gb2312",$destination); //如果上傳的文件名中有漢字,需要轉碼一下,用inocv函數,把utf-8轉為gb2312. if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上傳文件 { echo "文件上傳成功"; }else { echo "文件上傳失敗"; } }else {
第四步:匹配錯誤信息
switch($error) { case 1: echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值"; break; case 2: echo "超過了表單MAX_FILE_SIZE的限制大小"; break; case 3: echo "文件部分被上傳"; break; case 4: echo "沒有選擇上傳文件"; break; case 6: echo "沒有找到臨時目錄"; break; case 7: case 8: echo "系統錯誤"; break; } } ?>
感謝各位的閱讀!關于“PHP中文件上傳、客戶端和服務器端加限制、抓取錯誤信息的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。