PHP檔案上傳功能配置主要涉及php.ini設定檔中的upload_tmp_dir、upload_max_filesize、post_max_size等參數,Nginx中則是client_max_body_size。
1. 修改php設定檔(php.ini)
① file_uploads = On
預設允許HTTP檔案上傳,此選項必須設定為On。
② upload_tmp_dir =
預設為空白
③ upload_max_filesize = 2M
預設upload_max_filesize = 2M,即檔案上傳的大小為2M,如果你想上傳超過8M的檔案,比如20M,你必須設定upload_max_filesize = 20M。
④ post_max_size = 8M
修改php.ini設定檔中的post_max_size選項,其代表允許POST的資料最大位元組長度,預設為8M。如果POST資料超出限制,那麼$_POST和$_FILES將會為空白。要上傳大檔案,你必須設定該選項值大於 upload_max_filesize指令的值,一般設定upload_max_filesize和post_max_size值相等。另外如果啟用了記憶體限制,那麼該值應當小於memory_limit選項的值。
⑤ max_execution_time
在上傳大檔案時,如果網速很慢,當超過一定的時間,會報指令碼執行超過30秒的錯誤,這是因為在php.ini設定檔中 max_execution_time配置參數的限制原因,其表示每個指令碼最大允許執行時間(秒),0 表示沒有限制。你可以適當調整max_execution_time的值,不推薦設定為0。
2. 重新載入PHP設定檔
lnmp的PHP是fast-cgi模式,是單獨的服務,所以要單獨重啟php。
/usr/local/php/sbin/php-fpm reload
3. 修改nginx設定檔(nginx.conf)
在nginx.conf檔案中尋找client_max_body_size將後面的值設定為你想設定的值。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /home/www/htdocs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/htdocs$fastcgi_script_name;
include fastcgi_params;
client_max_body_size 35m; #用戶端上傳檔案大小設為35M
client_body_temp_path /home/www/nginx_temp; #設定臨時目錄
}
4. 重新載入Nginx設定檔
/usr/local/nginx/sbin/nginx -s reload
【另:(php 5.2.12 及以上的版本)一次最多上傳檔案數目。需要修改max_file_uploads數目,另外php貌似在版本5.3.21下有錯誤,設定的max_file_uploads值沒有作用。】
5. 使用phpinfo()函數查看php是否生效並測試上傳
===== 上傳測試代碼 ====
代碼如下 |
複製代碼 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <form action="" method="post" enctype="multipart/form-data" name="form1"> <input type="file" name="up_file" /> <input type="text" name="url" id="url" /> <input type="submit" name="upload" value="上傳" /> </form> <?php if(!empty($_FILES[up_file][name])){ if(!is_dir("upfile")){ mkdir("upfile"); } $path="upfile"; $fileinfo = $_FILES[up_file]; $type=strstr($fileinfo[name],"."); $fileinfo['name'] = "upfile/".time().rand(100,999).$type; //$fileinfo['tmp_name'] = "upfile"; //exit(print_r($fileinfo)); //echo $type; if($type != ".rar" && $type != ".zip"){ echo "檔案類型錯誤!只允許上傳zip或者rar格式的壓縮包!"; }else{ move_uploaded_file($fileinfo['tmp_name'],$fileinfo['name']); ?> <script> alert("12313");document.getElementById('url').value = <?php echo $fileinfo['name'];?></script> <?php echo "上傳成功"; } } ?> |