首先進(jìn)行排查事故原因
echo $_FILES['app_file']['tmp_name'] ;
確定輸出為空,再打印
echo '<br/>file error='.$_FILES['app_file']['error'] ;
得到結(jié)果file error=1
PHP編程語言中的常見的$_FILES系統(tǒng)函數(shù)用法有:
$_FILES['myFile']['name'] 顯示客戶端文件的原名稱。
$_FILES['myFile']['type'] 文件的 MIME 類型,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳文件的大小,單位為字節(jié)。
$_FILES['myFile']['tmp_name'] 儲存的臨時文件名,一般是系統(tǒng)默認(rèn)。
$_FILES["file"]["error"]是錯誤代碼,0表示沒有錯誤,下面幾種對應(yīng)不同的錯誤:
0、文件上傳成功。
1、超過了文件大小php.ini中即系統(tǒng)設(shè)定的大小。
2、超過了文件大小,MAX_FILE_SIZE 選項指定的值。
3、文件只有部分被上傳。
4、沒有文件被上傳。
5、上傳文件大小為0。
打開php.ini 配置文件,查找 File Uploads ,在這個區(qū)域有以下3個選項:
file_uploads = On
是否允許HTTP文件上傳。默認(rèn)值為On允許HTTP文件上傳,此選項不能設(shè)置為Off。
file_uploads = On
文件上傳的臨時存放目錄。如果沒指定則PHP會使用系統(tǒng)默認(rèn)的臨時目錄。該選項默認(rèn)為空,此選項在手動配置PHP運行環(huán)境時,也容易遺忘,如果不配置這個選項,文件上傳功能就無法實現(xiàn),你必須給這個選項賦值,比如upload_tmp_dir = "d:/fileuploadtmp" ,代表在D盤目錄下有一個fileuploadtmp目錄,并且給這目錄讀寫權(quán)限。
upload_max_filesize = 2M
上傳文件的最大尺寸。這個選項默認(rèn)值為2M,即文件上傳的大小為2M,如果你想上傳一個50M的文件,你必須設(shè)定 upload_max_filesize = 50M。但是僅設(shè)置upload_max_filesize = 50M 還是無法實現(xiàn)大文件的上傳功能,我們還必須修改php.ini文件中的 post_max_size 選項。
繼續(xù)在 php.ini 中查找 Data Handling ,在這個區(qū)域有1個選項:
post_max_size = 8M
指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認(rèn)為8M。如果POST數(shù)據(jù)超出限制,那么_FILES將會為空。要上傳大文件,你必須設(shè)定該選項值大于upload_max_filesize選項的值,例如你設(shè)置了upload_max_filesize = 50M ,這里可以把
post_max_size = 100M
另外如果啟用了內(nèi)存限制,那么該值應(yīng)當(dāng)小于memory_limit 選項的值。
繼續(xù)在 php.ini 中查找 Resource Limits ,在這個區(qū)域有3個選項:
max_execution_time = 30
每個PHP頁面運行的最大時間值(單位秒),默認(rèn)30秒。當(dāng)我們上傳一個較大的文件,例如50M的文件,很可能要幾分鐘才能上傳完,但php默認(rèn)頁面最久執(zhí)行時間為30秒,超過30秒,該腳本就停止執(zhí)行,這就導(dǎo)致出現(xiàn)無法打開網(wǎng)頁的情況。因此我們可以把值設(shè)置的較大些,如 max_execution_time = 600。 如果設(shè)置為0,則表示無時間限制。
max_input_time = 60
每個PHP腳本解析請求數(shù)據(jù)所用的時間(單位秒),默認(rèn)60秒。當(dāng)我們上傳大文件時,可以將這個值設(shè)置的較大些。 如果設(shè)置為0,則表示無時間限制。
memory_limit = 128M
這個選項用來設(shè)置單個PHP腳本所能申請到的最大內(nèi)存空間。這有助于防止寫得不好的腳本消耗光服務(wù)器上的可用內(nèi)存。如果不需要任何內(nèi)存上的限制將其設(shè)為 -1。
php5.2.0以前的版本默認(rèn)8M; php.5.2.0版本默認(rèn)為16M。php 5.2.0之后的版本默認(rèn)為 128M;
php.ini 配置上傳文件功能示例
假設(shè)要上傳一個50M的大文件。配置 php.ini 如下:
file_uploads = On
upload_tmp_dir = "d:/fileuploadtmp"
upload_max_filesize = 50M
post_max_size = 100M
max_execution_time = 600
max_input_time = 600
memory_limit = 128M
提示:需要保持 memory_limit > post_max_size > upload_max_filesize