關於php上傳檔案
擷取Apache伺服器參數
用ini_get(str)函數
例如擷取上傳檔案的最大值 echo ini_get(”upload_max_filesize”);
PHP上傳檔案涉及到的參數
PHP預設的上傳限定是最大2M,想上傳超過此設定的檔案,需要調整PHP、apache等的一些參數. 下面,我們簡要介紹一下PHP檔案上傳涉及到的一些參數:
是否允許通過HTTP上傳檔案的開關,預設為ON即是開
upload_tmp_dir用來說明PHP上傳的檔案放置的臨時目錄,要想上傳檔案,得保證伺服器沒有關閉臨時檔案和有對檔案夾的寫入權限,如果未指定則PHP使用系統預設值
允許上傳檔案大小的最大值,預設為2M
控制在採用POST方法進行一次表單提交中PHP所能夠接收的最大資料量。如果希望使用PHP檔案上傳功能,則需要將此值改為比upload_max_filesize要大…….?????????? 更多……
?
以秒為單位對通過POST、GET以及PUT方式接收資料時間進行限制。如果應用程式所運行環境處在低速鏈路上,則需要增加此值以適應接收資料所需的更多時間
為了避免正在啟動並執行指令碼大量使用系統可用記憶體,PHP允許定義記憶體使用量限額。通過memory_limit變數來指定單個指令碼程式可以使用的最大記憶體容量變數memory_limit的值應當適當大於post_max_size的值
max_execution_time設定了在強制終止指令碼前PHP等待指令碼執行完畢的時間,此時間以秒計算。當指令碼進入了一個無限迴圈狀態時此變數非常有用。然而,當存在一個需要很長時間完成的合法活動時(例如上傳大型檔案),這項功能也會導致操作失敗。在這樣的情況下必須考慮將此變數值增加,以避免PHP在指令碼正在執行某些重要過程的時候將指令碼關閉
- 對於linux主機,可能在/etc/httpd/conf.d/access.conf/下面裡面還有php.conf 檔案,這個檔案可能會解決一些系統的檔案大小限制問題
PHP檔案上傳的原理及實現
利用php的檔案函數來實現上傳
這段代碼分為兩個檔案,一個為upload.html,一個是upload.php
其中,
- 請注意這是一個標籤,我們要實現檔案的上傳,必須指定為multipart/form-data,否則伺服器將不知道要幹什麼。
- 值得注意的是檔案upload.html中表單選項 MAX_FILE_SIZE 的隱藏範圍,通過設定其Value(值)可以限制上傳檔案的大小。
- MAX_FILE_SIZE 的值只是對瀏覽器的一個建議,實際上它可以被簡單的繞過。因此不要把對瀏覽器的限制寄希望於該值。實際上,PHP 設定中的上傳檔案最大值,是不會失效的。但是最好還是在表單中加上 MAX_FILE_SIZE,因為它可以避免使用者在花時間等待上傳大檔案之後才發現該檔案太大了的麻煩。
$f=&$HTTP_POST_FILES['Myfile'];$dest_dir='uploads';//設定上傳目錄$dest=$dest_dir.'/'.date("ymd")."_".$f['name'];//設定檔案名稱為日期加上檔案名稱避免重複$r=move_uploaded_file($f['tmp_name'],$dest);chmod($dest, 0755);//設定上傳的檔案的屬性或者
以上範例中 $_FILES 數組的內容如下所示。我們假設檔案上傳欄位的名稱為 userfile(名稱可隨意命名)
- $_FILES[’userfile’][’name’] 用戶端機器檔案的原名稱。
- $_FILES[’userfile’][’type’] 檔案的 MIME 類型,需要瀏覽器提供該資訊的支援,例如“image/gif”。
- $_FILES[’userfile’][’size’] 已上傳檔案的大小,單位為位元組。
- $_FILES[’userfile’][’tmp_name’] 檔案被上傳後在服務端儲存的臨時檔案名稱。
- $_FILES[’userfile’][’error’] 和該檔案上傳相關的錯誤碼
- 值:0; 沒有錯誤發生,檔案上傳成功。
- 值:1; 上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
- 值:2; 上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
- 值:3; 檔案只有部分被上傳。
- 值:4; 沒有檔案被上傳。