PHP上傳文件之POST方法巧用
學習PHP時,你可能會遇到PHP上傳問題,這里將介紹PHP上傳問題的解決方法,在這里拿出來和大家分享一下。本特性可以使用戶上傳文本和二進制文件。用 PHP 的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳后怎樣處理PHP上傳的文件。請注意 PHP 也支持 PUT 方法的文件上傳,Netscape Composer 和 W3C 的 Amaya 客戶端使用這種方法。
例子1. 文件上傳表單
可以如下建立一個特殊的表單來支持文件上傳:
- <!-- The data encoding type, enctype, MUST be specified as below -->
- <form enctype="multipart/form-data" action="__URL__" method="POST">
- <!-- MAX_FILE_SIZE must precede the file input field -->
- <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
- <!-- Name of input element determines name in -->
PHP上傳之POST方法上傳
本特性可以使用戶上傳文本和二進制文件。用 PHP 的認證和文件操作函數,可以完全控制允許哪些人上傳以及文件上傳后怎樣處理。PHP 能夠接受任何來自符合 RFC-1867 標準的瀏覽器(包括 Netscape Navigator 3 及更高版本,打了補丁的 Microsoft Internet Explorer 3 或者更高版本)上傳的文件。請注意 PHP 也支持 PUT 方法的文件上傳,Netscape Composer 和 W3C 的 Amaya 客戶端使用這種方法。
例子2. 文件上傳表單
可以如下建立一個特殊的表單來支持文件上傳:
- ___FCKpd___0
以上范例中的 __URL__ 應該被換掉,指向一個真實的 PHP 文件。
#T#MAX_FILE_SIZE 隱藏字段(單位為字節)必須放在文件輸入字段之前,其值為接收文件的最大尺寸。這是對瀏覽器的一個建議,PHP 也會檢查此項。在瀏覽器端可以簡單繞過此設置,因此不要指望用此特性來阻擋大文件。實際上,PHP 設置中的上傳文件最大值是不會失效的。但是最好還是在表單中加上此項目,因為它可以避免用戶在花時間等待上傳大文件之后才發現文件過大上傳失敗的麻煩。注: 要確保文件上傳表單的屬性是 enctype="multipart/form-data",否則文件上傳不了。
全局變量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此數組包含有所有上傳的文件信息。以上范例中 $_FILES 數組的內容如下所示。我們假設文件上傳字段的名稱如上例所示,為 userfile。名稱可隨意命名。
- $_FILES['userfile']['name']
客戶端機器文件的原名稱。
- $_FILES['userfile']['type']
文件的 MIME 類型,如果瀏覽器提供此信息的話。一個例子是“image/gif”。不過此 MIME 類型在 PHP 端并不檢查,因此不要想當然認為有這個值。
- $_FILES['userfile']['size']
已上傳文件的大小,單位為字節。
- $_FILES['userfile']['tmp_name']
文件被上傳后在服務端儲存的臨時文件名。
- $_FILES['userfile']['error']
和該文件上傳相關的錯誤代碼。此項目是在 PHP 4.2.0 版本中增加的。文件被上傳后,默認地會被儲存到服務端的默認臨時目錄中,除非 php.ini 中的 upload_tmp_dir 設置為其它的路徑。服務端的默認臨時目錄可以通過更改 PHP 運行環境的環境變量 TMPDIR 來重新設置,但是在 PHP 腳本內部通過運行 putenv() 函數來設置是不起作用的。該環境變量也可以用來確認其它的操作也是在上傳的文件上進行的。