PHP檔案上傳操作執行個體詳解

來源:互聯網
上載者:User
本文執行個體分析了PHP檔案上傳操作。分享給大家供大家參考,具體如下:

檔案上傳

發生在瀏覽器向伺服器發出的請求中。

檔案,對於瀏覽器來講,就是表單中的一個特殊類型的資料而已。

瀏覽器表單中的資料,兩種類型:

字串類型(位元組流編碼)

檔案類型(二進位編碼),檔案是表單資料中一部分

伺服器角度:

在接受瀏覽器請求時,處理好表單內的資料。根據資料類型不同使用不同處理方法:

字串類型,儲存在$_POST變數中(記憶體)

檔案型資料,儲存在上傳臨時目錄中

表單提交時,瀏覽器會預設的行為:

表單內的的內容都是字串類型,即使添加了檔案域,需要在form上增加屬性,告知瀏覽器上傳的不止有字串類型資料。enctype="multipart/form-data"

<body>  <form action="upload.php" method="post" enctype="multipart/form-data">    <input type="file" name="file">    </br>    <input type="submit" value="submit">  </form></body>

php伺服器在接收到檔案類型的表單資料後,將檔案儲存體於臨時目錄(屬於臨時檔案,指令碼周期內有效)

; Temporary directory for HTTP uploaded files (will use system default if not; specified).; http://php.net/upload-tmp-dir;upload_tmp_dir =

將臨時檔案持久化儲存

move_uploaded_file(src_url,goa_url)

$_FILES,儲存了上傳檔案的資訊包括臨時地址

錯誤類型:

0-1-2-3-4-6-7

0表示沒有錯誤

1表示檔案大於php的設定

; Maximum allowed size for uploaded files.; http://php.net/upload-max-filesizeupload_max_filesize = 2M

2表示檔案大於表單設定max_file_size

<input type='hidden' name='MAX_FILE_SIZE' value='1024'>

3表示檔案上傳不完整

4表示沒有上傳檔案

5表示邏輯上上傳了0位元組的檔案(空檔案)

6表示沒有找到臨時上傳目錄(許可權不足)

7表示檔案寫入失敗(磁碟空間、許可權)

php允許的最大上傳檔案數量

; Maximum number of files that can be uploaded via a single requestmax_file_uploads = 20

post存在最大值限制

一旦超過,php就不能正常處理post與file值可能為空白值

; Maximum size of POST data that PHP will accept.; http://php.net/post-max-sizepost_max_size = 8M

類型檢測中

尾碼名與mime都是瀏覽器提供的,需要php的擴充fileinfo完成對檔案資訊的檢查(函數過程與物件導向)

;extension=php_fileinfo.dll

$finfo = new Finfo(FILEINFO_MIME_TYPE);$mine_type = $finfo->file($file['tmp_name']);

分子目錄儲存上傳檔案

原則:商務邏輯、檔案數量、時間

建立目錄 mkdir()

檢查目錄 is_dir()

<?phpupload($_FILES['file']);function upload($file){  if($file['error']!=0){    return false;  }  //3M  $max_size = 3145728;  if($max_size<$file['size']){    return false;  }  //設定一個尾碼名與mime的映射關係  $type_map = array(    '.jpeg'=>array('image/jpeg','image/pjpeg'),    '.jpg'=>array('image/jpeg','image/pjpeg'),    '.png'=>array('image/png','image/x-png'),    '.gif'=>array('image/gif')  );  //尾碼  $allow_ext_list = array('.jpeg','.png','.jpg');  $ext = strtolower(strrchr($file['name'],'.'));  if(!in_array($ext,$allow_ext_list)){    echo '不支援該圖片格式';    return false;  }  //MIME  $allow_mime_list = array();  foreach($allow_ext_list as $val){    $allow_mime_list = array_merge($allow_mime_list,$type_map[$val]);  }  //瀏覽器提供資訊堅持  $allow_mime_list = array_unique($allow_mime_list);  if(!in_array($file['type'],$allow_mime_list)){    echo '不支援該圖片格式';    return false;  }  //php自身檢查  $file_mime = new Finfo(FILEINFO_MIME_TYPE);  $mime = $file_mime->file($file['tmp_name']);  if(!in_array($mime,$allow_mime_list)){    echo '不支援該圖片格式';    return false;  }  //目錄存放  $up_loadpath = './';  $sub_dir = date('Ymdh');  if(!is_dir($up_loadpath.$sub_dir)){    mkdir($up_loadpath.$sub_dir);  }  $prefix = 'bee_';  $name = uniqid($prefix,true).$ext;  if(move_uploaded_file($file['tmp_name'],$up_loadpath.$sub_dir.$name)){    echo '上傳成功';    return $name;  }else{    echo '上傳失敗';    return false;  }}

希望本文所述對大家PHP程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.