php.ini無法上傳大文件完美解決辦法
1、打開php.ini(打開方式就不用說了,百度一大堆)
2、查找post_max_size
表單提交最大數(shù)值,此項不是限制上傳單個文件的大小,而是針對整個表單的提交數(shù)據(jù)進(jìn)行限制的
默認(rèn)為8M,設(shè)置為自己需要的值,此參數(shù)建議要設(shè)置比upload_max_filesize大一些
3、查找File Uploads
是否允許通過http上傳文件的開關(guān),確認(rèn)file_uploads = on
4、查找upload_tmp_dir
文件上傳至服務(wù)器上存儲臨時文件的地方,如果沒指定就會用系統(tǒng)默認(rèn)的臨時文件夾
如果系統(tǒng)報錯提示有“XXX臨時目錄XXX”的話,這個目錄就需要你來設(shè)置一個有效目錄,沒報錯就不用管
5、查找upload_max_filesize
允許上傳文件大小的最大值,默認(rèn)為2M,設(shè)置為自己需要的值此參數(shù)建議不要超過post_max_size值,因為它受控于post_max_size值(就算upload_max_filesize設(shè)置了1G,而post_max_size只設(shè)置了2M時,大于2M的文件照樣傳不上去,因為它受控于post_max_size值)
6、如果要上傳大于8M的文件,還需要對下面的參數(shù)也進(jìn)行設(shè)置:
查找max_execution_time = 600 ;每個PHP頁面運(yùn)行的最大時間值(秒),默認(rèn)30秒
max_input_time = 600 ;每個PHP頁面接收數(shù)據(jù)所需的最大時間,默認(rèn)60秒
memory_limit = 8M ;每個PHP頁面所需要的最大內(nèi)存,默認(rèn)8M
nginx法上傳大文件完美解決辦法
1.client_body_buffer_size 盡量設(shè)置的大點(diǎn),這是基于速度的考慮,如果因為設(shè)置的過小,導(dǎo)致上傳的文件老要寫磁盤,那速度就太慢了。
2.client_body_temp_path 路徑要有可寫權(quán)限,這個是明顯的錯誤了。改正了就好
3.client_max_body_size 設(shè)置上傳文件的最大值,這個是基于安全的考慮,我們認(rèn)為正常用戶不會或者基本不會上傳太大的文件。
可以設(shè)置為client_max_body_size 100m; 或者按照自己的業(yè)務(wù)來設(shè)置這個值。
例子
nginx的配置。
代碼如下:
cd /export/servers/nginx/conf/nginx.conf,在這個配置文件里面的server段里面的
location / {
root html;
index index.html index.htm;
client_max_body_size 1000m;
}
加上了client_max_body_size 字段,怎么重啟都不行。后來在總配置文件里面發(fā)現(xiàn)了分配置文件:
代碼如下:
sendfileon;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include domains/*;
#include domains/chat.local;
#include domains/chat.erp.com;
#include domains/support.chat.com;
#include douains/chat.com;
server {
listen 80;
server_name localhost;
于是找到了分配置文件,在分配置文件里面進(jìn)行修改。分配置文件配置如下:
代碼如下:
server
{
listen 80;
server_name chat.erp.360buy.com;
# access_log /export/servers/nginx/logs/chat.erp.360buy.com;
location / {
proxy_pass;
client_max_body_size 1000m;
}
}
用/export/servers/nginx/sbin/nginx -s reload重啟下,上傳文件的大小受限的問題就解決了。
分享下我的解決過程,希望對大家有幫助。
如果還是無法解決我們需要看看是不是php表單設(shè)置問題
這段代碼分為兩個文件,一個為upload.html,一個是upload.php
upload.html
代碼如下:
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="100000">
<input name="userfile" type="file">
<input type="submit" value="上傳文件">
</form>
其中,
請注意
這是一個標(biāo)簽,我們要實現(xiàn)文件的上傳,必須指定為multipart/form-data,否則服務(wù)器將不知道要干什么。
值得注意的是文件upload.html中表單選項 MAX_FILE_SIZE 的隱藏值域,通過設(shè)置其Value(值)可以限制上載文件的大小。
MAX_FILE_SIZE 的值只是對瀏覽器的一個建議,實際上它可以被簡單的繞過。因此不要把對瀏覽器的限制寄希望于該值。實際上,PHP 設(shè)置中的上傳文件最大值,是不會失效的。但是最好還是在表單中加上 MAX_FILE_SIZE,因為它可以避免用戶在花時間等待上傳大文件之后才發(fā)現(xiàn)該文件太大了的麻煩。
upload.php
代碼如下:
$f=&$HTTP_POST_FILES['Myfile'];
$dest_dir=’uploads’;//設(shè)定上傳目錄
$dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//設(shè)置文件名為日期加上文件名避免重復(fù)
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//設(shè)定上傳的文件的屬性
或者
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>
以上范例中 $_FILES 數(shù)組的內(nèi)容如下所示。我們假設(shè)文件上傳字段的名稱為 userfile(名稱可隨意命名)
更多信息請查看IT技術(shù)專欄