當前位置:首頁 » 文件管理 » php上傳大文件失敗

php上傳大文件失敗

發布時間: 2024-10-19 14:52:25

❶ 如何突破php上傳文件大小限制

1. 一般的php文件上傳,除非文件很小.就像一個5M的文件,很可能要超過一分鍾才能上傳完.
但在php中,默認的該頁最久執行時間為 30 秒.就是說超過30秒,該腳本就停止執行.
這就導致出現 無法打開網頁的情況.這時我們可以修改 max_execution_time
在php.ini里查找

Java代碼

  • max_execution_time



  • 默認是30秒.改為


  • max_execution_time = 0


  • 0表示沒有限制


  • 以上修改的是php上傳文件中腳本執行超時時間



  • 2. 修改 post_max_size 設定 POST 數據所允許的最大大小。此設定也影響到php上傳文件。


  • php默認的post_max_size 為2M.如果 POST 數據尺寸大於 post_max_size $_POST 和 $_FILES superglobals 便會為空.


  • 查找 post_max_size .改為


  • Java代碼

    post_max_size=150M



  • 3. 修改了第二步,但php上傳文件時最大仍然為 8M。


  • 為什麼呢.我們還要改一個參數upload_max_filesize 表示所上傳的文件的最大大小。


  • 查找upload_max_filesize,默認為8M改為


  • Java代碼

    upload_max_filesize=100M

❷ php文件上傳失敗的問題

在用PHP進行文件上傳的操作中,需要知道怎麼控制上傳文件大小的設置,而文件可傳大小是受到多種因素制約的,現總結如下:
1、php.ini:upload_max_filesize 所上傳的文件的最大大小。默認值2M。

2、php.ini:memory_limit 本指令設定了一個腳本所能夠申請到的最大內存位元組數,默認值8M。如果不需要任何內存上的限制,必須將其設為 -1。如果內存不夠,則可能出現錯誤:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)
3、php.ini:post_max_size 設定POST數據所允許的最大大小。此設定也影響到文件上傳。要上傳大文件,該值必須大於 upload_max_filesize。
4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds
5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
6、如果用到mysql的BLOB進行二進制文件存儲,則需要設置my.ini:max_allowed_packet=xxM

7、httpd.conf
在 Apache 裡面有一個選項是 LimitRequestBody,這個選項可以限制用戶送出的 HTTP 請求內容。這個選項可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 內使用,分別可以用在 virtualhost 或目錄屬性設定。而 LimitRequestBody 的設定值是介乎 0 (無限制) 至 2147483647 (2GB)。
例如要在目錄 D:/AppServ/www 設定上傳限制為 100K,可以在 .htaccess 或 httpd.conf 加入以下語句:
LimitRequestBody 1024000000
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all
如果透過 .htaccess 設定,儲存檔案後會立即生效;如透過 httpd.conf 設定,須要重新啟動 Apache。
PHP關於文件上傳部分,特別提到表單隱藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文檔中給出的例子如下:
<form enctype=」multipart/form-data」 action=」_URL_」 method=」POST」>
<input type=」hidden」 name=」MAX_FILE_SIZE」 value=」30000″>
Send this file: <input name=」userfile」 type=」file」>
<input type=」submit」 value=」Send File」>
form>
Send this file:
這里設置MAX_FILE_SIZE = 30000,期待一種可能,使得瀏覽器在傳送文件之前能夠依此作出預先判斷,如果文件尺寸大於30000位元組,則不執行實際的POST動作。也就是不往伺服器發送文件內容,而是直接在客戶端提醒用戶「你試圖上傳的文件超過30000位元組」。
這的確是一個非常棒的主張,但在現實中卻暫時無法實現。不是因為這個限制可以「被簡單地繞過」,而是IE和FireFox這兩個主流瀏覽器都不支持這個特性。PHP的這個建議尚未被採納。
MAX_FILE_SIZE還有一個用場:後台PHP會判斷接收到的文件大小是否大於這個值,如果超出,$_FILES[『thisfile』][『error』]會被設置為UPLOAD_ERR_FORM_SIZE(2),同時放棄保存臨時文件,將$_FILES[『thisfile』][『size』]置0。
這個例子,沒問題,表現正常,當我試圖上傳一個40多K的文件時,PHP程序報告「文件超過MAX_FILE_SIZE」。
但是,如果我們將表單中的MAX_FILE_SIZE從30000減少到1000,情形又如何呢?
上傳800位元組的文件,正常;
上傳40K的文件,PHP報告文件過大,也正常;
上傳3000個位元組的文件,PHP未報告錯誤,它成功保存了文件!出乎意料!
問題就出在main/rfc1867.c中判斷文件是否超長的這部分代碼上。php每次從buffer中讀取FILLUNIT位元組長度的內容後,首先判斷「已經讀到的內容長度(total_bytes)」是否大於MAX_FILE_SIZE,然後再增加「已經讀到的內容長度(total_bytes)」。這樣一來,和預計的結果之間至多會有FILLUNIT位元組的誤差,而FILLUNIT=1024*5=5K。(點擊bug了解詳細內容)
這就是說,當MAX_FILE_SIZE<5K時,上傳一個大於MAX_FILE_SIZE,但是小於5K的文件是沒有問題的。
當然,因為這個設置很容易被繞過,所以伺服器端編程不應當依賴於MAX_FILE_SIZE。而且,5K到底是個很小的數值,對大多數上傳文件的表單來說沒有影響。
PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的設置,和客戶端上傳給伺服器端的流量大小無關。
Apache伺服器從客戶端接收長度不超過LimitRequestBody位元組數的請求,然後傳送給php模塊,php模塊再決定是否保存成臨時文件,設置$_FILES全局變數,移交給script進一步處理。
這個Apache的LimitRequestBody選項預設值=0,允許Request body的最大位元組數是2G(Linux + Apache)
最後還要注意的是:
html本身能夠post數據也是有限制的,不能超過2G。
ftp客戶端有文件偏移指針的2GB邊界限制,未使用特殊編譯flag編譯的ftp伺服器端或者客戶端,無論在什麼FS中都不支持大於2GB的文件。不知道PHP會不會也有這種情況。

❸ php無法上傳文件

我也遇到過,我是APACHE+PHP的環境。
造成這個情況的原因可能比較多,我也只說的出來幾個,你試一下
1.PHP程序的問題,如果可能的話,看一下源代碼的上傳模塊。
2.上傳文件的文件名必須是中文,或者必須是英文or數字.
3.如果有後台的話,則有可能是後台的功能配置,特別注意一下上傳文件的大小與格式。
如果還是不能上傳,我就懷疑是上傳模塊的問題了,你可以給你的Php站加一個上傳模塊,或者從後台上傳。
而且有的模塊是只能從後台上傳,也就是只有管理員可以上傳。

❹ php上傳文件 關於上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值

你上面那個是判斷出現錯誤情況下的,判斷有沒超過你定義的大小是返回錯誤為0的情況下進行判斷。
if($_FILES['file']['error']>0){
switch($_FILES['file']['error']){
case1:
echo"上傳的文件超過了php.ini中upload_max_filesize選項限制的值。";
break;
case2:
echo"上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值。";
break;
case3:
echo"文件只有部分被上傳。";
break;
case4:
echo"沒有文件被上傳。";
break;
default:
echo"未知錯誤!";
}
exit;
}
else
{
if($_FILES['file']['size']>1000000)
{
echo"上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值。";
exit;
}
}

echo"上傳成功";

❺ php上傳問題 在上傳不成功的情況下,當上傳文件大於10M(大概數)時就會報錯,而不是根據程序提示,

你說的10M應該是php.ini里設置的上傳文件大小限制,而你這個switch判斷是基於表單上傳文件大小來判斷的,兩者毫無相關!
一、超過10M,在php底層處理請求時就直接報錯了,根本執行不到你switch的地方,所以報錯是非預期的
二、超過2M,php能正常執行,所以會按照你switch來報錯

這里,你要搞清楚php的上傳文件大小限制跟form表單上傳文件大小限制的關系

❻ php 2G 大的文件上傳不了 伺服器也配置了~ 什麼原因 如何解決~~

大文件上傳,最好採用其它方式,比如ftp之類的,http上傳很容易出問題,而且也受到伺服器的限制,比如內存大小,比如磁碟分區格式之類

熱點內容
單各演算法 發布:2024-10-19 17:27:41 瀏覽:574
壓縮機380接線圖 發布:2024-10-19 17:19:35 瀏覽:536
站街腳本 發布:2024-10-19 17:00:40 瀏覽:385
python段子 發布:2024-10-19 16:53:42 瀏覽:339
本田皓影混動版尊貴版都有哪些配置 發布:2024-10-19 16:44:13 瀏覽:336
抖音真空緩存 發布:2024-10-19 16:42:53 瀏覽:394
vs修改源程序重新編譯 發布:2024-10-19 16:19:44 瀏覽:179
伺服器黑名單是什麼 發布:2024-10-19 16:18:12 瀏覽:440
rust如何開伺服器 發布:2024-10-19 16:10:04 瀏覽:834
flappybird源碼 發布:2024-10-19 15:56:31 瀏覽:539