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