php環境無法上傳的解決辦法(為什麼php文件不能運行)

本文目錄一覽:

php環境無法上傳圖片的幾種解決辦法

第二點、 php.ini配置文件(以下幾小點)1、file_uploads 是否開啟 on 必須開啟 是否允許HTTP文件上傳;確定上傳大小 post_max_size = 8M (服務器端)2、PHP接受的POST數據最大長度 (客戶端)要上傳大文件,該值必須大於”upload_max_filesize”如果配置腳本中激活了內存限制,”memory_limit”也會影響文件上傳。一般說來,”memory_limit”應該比”post_max_size”要大 允許上傳的文件的最大尺寸 upload_max_filesize = 1204KB3、每個腳本最大允許執行時間, 按秒計這個參數有助於阻止劣質腳本無休止的佔用服務器資源。注: “max_execution_time”僅影響腳本本身的運行時間。任何其它花費在腳本運行之外的時間,如用system()/sleep()函數的使用、數據庫查詢、文件上傳等都不包括在內。在安全模式下,你不能用ini_set()在運行時改變這個設置,每個腳本接收輸入數據的最大允許時間(POST, GET, upload), 按秒計設定一個腳本所能夠申請到的最大內存位元組數。這有助於防止劣質腳本消耗完服務器上的所有內存,要使用此指令必須在編譯的時候激活。

php無法上傳文件到linux主機,高分加急,在線等待!

應該是權限問題,你進入你的WEB目錄,找到你要存儲上傳文件的目錄,假如為/var/www/upload,執行chown -R www-data:www-data /var/www/upload,如果你沒有更改過apache默認用戶的話,如果更改過,則用更改過的用戶和組(www-data:www-data)。個人建議不要更改權限為777,非常不安全!有問題在M我!

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_SIZE5K時,上傳一個大於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會不會也有這種情況。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/193394.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 15:01
下一篇 2024-12-01 15:01

相關推薦

發表回復

登錄後才能評論