溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PHP中文件上傳、客戶(hù)端和服務(wù)器端加限制、抓取錯(cuò)誤信息的示例分析

發(fā)布時(shí)間:2021-07-13 15:20:20 來(lái)源:億速云 閱讀:136 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(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ò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

php
AI