php檔案上傳詳解

來源:互聯網
上載者:User

一、上傳檔案首先要在php.ini裡按自己的需求進行相應配置。

有以下幾個重要的配置單:

選項

預設值

說明

post_max_size

8M

控制以後的POST請求的最大規模。必須大於upload_max_filesize選項值。

max_input_time

60

指定一個POST請求提交所有資料可以花費的時間。以秒為單位。在此時間之後結束資料提交。

memory_limit

128M

一個指令碼頁所能消耗的最大記憶體。

max_execution_time

30

指令碼最大執行時間。以秒為單位。

file_uploads

On

指出是否允許檔案上傳。預設值為on

upload_max_filesize

2M

控制PHP接受的最大檔案規模。如果檔案太大,PHP就寫入一個0位元組的預留位置檔案。

upload_tmp_dir

NULL

必須設定為一個有效目錄。可以將上傳的檔案放在這裡等候處理。

1. 一般的php檔案上傳,除非檔案很小.就像一個5M的檔案,很可能要超過一分鐘才能上傳完.
但在php中,預設的該頁最久執行時間為 30 秒.就是說超過30秒,該指令碼就停止執行.
這就導致出現 無法開啟網頁的情況.這時我們可以修改 max_execution_time
在php.ini裡尋找
max_execution_time
預設是30秒.改為
max_execution_time = 0  0表示沒有限制
以上修改的是php上傳檔案中指令碼執行逾時時間


2. 修改 post_max_size 設定 POST 資料所允許的最大大小。此設定也影響到php上傳檔案。
php預設的post_max_size 為2M.如果 POST 資料尺寸大於 post_max_size $_POST 和 $_FILES superglobals 便會為空白.
尋找 post_max_size .改為
post_max_size = 150M


3. 很多人都會改了第二步.但php上傳檔案時最大仍然為 8M.
為什麼呢.我們還要改一個參數upload_max_filesize 表示所上傳的檔案的最大大小。
尋找upload_max_filesize,預設為8M改為
upload_max_filesize = 100M
另外要說明的是在php檔案上傳中,post_max_size 大於 upload_max_filesize 為佳.

二、在HTML表單中設定上傳

需要注意三個地方:

  1. 將form表單提交方式設為POST
  2. 添加一個“file”類型的<input>標籤(如果是多檔案上傳,添加多個)
  3. 將enctype屬性添加到表單中,表示將使用新的multipart/form-data MIME類型。

提交資料以後,伺服器通過超級全域數組$_FILES訪問提交的檔案。這個數組包含的元素個數為表單file個數相同。例如:如果表單裡有一個上傳檔案的選框:

<input type=”file” name=”filename”>

當提交資料後,可以通過$_FILES[‘filename’]來取得這個檔案的資訊。該資訊如下:

$_FILES[‘filename’]:

       [‘name’]  =>   檔案名稱

       [‘type’]   =>   檔案MIME類型。如image/jpeg, text/plain,
application/octet-stream等。

       [‘tmp_name’] => 如果檔案小於允許上傳檔案大小,則該位置表示上傳的檔案臨時存放路徑及臨時檔案名稱,被放在upload_tmp_dir所指定的位置。

       [‘error’] =>    錯誤碼。

       [‘size’] =>      檔案大小。

其中error錯誤碼可能的值如下表:

編碼

說明

UPLOAD_ERR_OK

0

檔案成功上傳

UPLOAD_ERR_INI_SIZE

1

檔案大小比php.ini中upload_max_filesize指定值要大

UPLOAD_ERR_FORM_SIZE

2

檔案的 小比表單的MAX_FILE_SIZE指定的值大

UPLOAD_ERR_PARTIAL

3

檔案上傳不完整(可能因為請求時間過長被終止)

UPLOAD_ERR_NO_FILE

4

沒有檔案隨著這個請求上傳

UPLOAD_ERR_NO_TMP_DIR

6

在php.ini中沒有指定臨時檔案夾

只有當$_FILES[‘filename’][‘error’]的值為0時,才應該繼續處理檔案。

單檔案上傳HTML結構樣本:

<form action="" method="post" enctype="multipart/form-data"><p>File:<input type="file" name="filename" /><input type="submit" value="Send" /></p></form>

多檔案上傳HTML結構樣本:

<form action="" method="post" enctype="multipart/form-data"><p>Files:<input type="file" name="filename[]" /><input type="file" name="filename[]" /><input type="file" name="filename[]" /><input type="submit" value="Send" /></p></form>

三、php服務端對資料進行處理

像檔案大小和類型限制、分目錄存放、檔案資訊入庫等操作,都可以根據需要自行處理,這裡給一個簡單的例子:

 

include_once 'conn/conn.php';$filename = $_FILES['filename']['name'];//讀取上傳檔案名稱,並存為數組$filetype = $_POST['foundtype'];//讀取上傳檔案的類別$tmpname = $_FILES['filename']['tmp_name'];//讀取臨時檔案名稱,並存為數組$tmpsize = $_FILES['filename']['size'];//上傳檔案大小$tmppub = $_POST['ispub'];//是否公開$file_path = 'upfile/';$max = 0;if(!is_null($tmpsize)){foreach($tmpsize as $value){$max += $value;}if($max > 100000000 or $max <= 0){echo '<script>alert("上傳檔案總大小大於100M,請重新選擇1");location="'.$_SERVER['HTTP_REFERER'].'";</script>';}}else{/*var_dump($tmpsize);exit();*/echo '<script>alert("上傳檔案錯誤,請重新檢查程式");location="'.$_SERVER['HTTP_REFERER'].'";</script>';}$chkdownnum = '';for($i = 0; $i < 15; $i++){$chkdownnum .= dechex(rand(0,15));}for ($i = 0; $i < count($filename); $i++){//通過迴圈將多個檔案全部上傳move_uploaded_file($tmpname[$i],$file_path.$filename[$i]);//添加進資料庫$insertsql = 'insert into tb_upfile (filename,filepath,filetype,upauthor,chkdownnum,ispub) values("'.trim($filename[$i]).'","'.$file_path.$filename[$i].'","'.$filetype[$i].'","'.$_SESSION['name'].'","'.trim($chkdownnum).'",'.$tmppub[$i].')';$conne->uidRst($insertsql);}echo '<div style=" padding-top: 30px;">檔案上傳成功!</div>';

這裡推薦幾個蠻好用的jquery外掛程式:uploadify(flash版/html5版)jQuery File Upload (html5)plupload(多種runtime支援)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.