日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

【转载】解决Apache2+PHP上传文件大小限制的问题

發(fā)布時(shí)間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】解决Apache2+PHP上传文件大小限制的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文出處:http://evol1216.blog.163.com/blog/static/13019958020106783623528/

在用PHP進(jìn)行文件上傳的操作中,需要知道怎么控制上傳文件大小的設(shè)置,而文件可傳大小是受到多種因素制約的,現(xiàn)總結(jié)如下:

1、php.ini:upload_max_filesize 所上傳的文件的最大大小。默認(rèn)值2M。

2、php.ini:memory_limit 本 指令設(shè)定 了一個(gè)腳本所能夠申請(qǐng)到的最大內(nèi)存字節(jié)數(shù),默認(rèn)值8M。如果不需要任何內(nèi)存上的限制,必須將其設(shè)為 -1。如果內(nèi)存不夠,則可能出現(xiàn)錯(cuò)誤:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)(一般導(dǎo)入數(shù)據(jù)庫(kù)時(shí),如果數(shù)據(jù)庫(kù)太大,就會(huì)報(bào)錯(cuò),改這個(gè)就可以)

3、php.ini:post_max_size 設(shè)定POST數(shù)據(jù)所允許的最大大小。此設(shè)定也影響到文件上傳。要上傳大文件,該值必須大于 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進(jìn)行二進(jìn)制文件存儲(chǔ),則需要設(shè)置my.ini:max_allowed_packet=xxM

7、httpd.conf
??? 在 Apache 里面有一個(gè)選項(xiàng)是 LimitRequestBody, 這個(gè)選項(xiàng)可以限制用戶送出的 HTTP 請(qǐng)求內(nèi)容。這個(gè)選項(xiàng)可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 內(nèi)使用,分別可以用在 virtualhost 或目錄屬性設(shè)定。而 LimitRequestBody 的設(shè)定值是介乎 0 (無(wú)限制) 至 2147483647 (2GB)。
例如要在目錄 D:/AppServ/www 設(shè)定上傳限制為 100K,可以在 .htaccess 或 httpd.conf 加入以下語(yǔ)句:

  1. LimitRequestBody?1024000000
  2. Options?Indexes?FollowSymLinks?MultiViews?ExecCGI
  3. AllowOverride?All
  4. Order?allow,deny
  5. Allow?from?all

如果透過(guò) .htaccess 設(shè)定,儲(chǔ)存檔案后會(huì)立即生效;如透過(guò) httpd.conf 設(shè)定,須要重新啟動(dòng) Apache。

PHP關(guān)于文件上傳部分,特別提到表單隱藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文檔中給出的例子如下:
?

  1. <form?enctype="multipart/form-data"?action="_URL_"?method="POST">
  2. ????<input?type="hidden"?name="MAX_FILE_SIZE"?value="30000">
  3. ????Send?this?file:?<input?name="userfile"?type="file">
  4. ????<input?type="submit"?value="Send?File">
  5. </form>


這里設(shè)置MAX_FILE_SIZE = 30000,期待一種可能,使得瀏覽器在傳送文件之前能夠依此作出預(yù)先判斷,如果文件尺寸大于30000字節(jié),則不執(zhí)行實(shí)際的POST動(dòng)作。也就是不往服 務(wù)器發(fā)送文件內(nèi)容,而是直接在客戶端提醒用戶“你試圖上傳的文件超過(guò)30000字節(jié)”。
這的確是一個(gè)非常棒的主張,但在現(xiàn)實(shí)中卻暫時(shí)無(wú)法實(shí)現(xiàn)。不是因?yàn)檫@個(gè)限制可以“被簡(jiǎn)單地繞過(guò)”,而是IE和FireFox這兩個(gè)主流瀏覽器都不支持這個(gè)特性。PHP的這個(gè)建議尚未被采納。

MAX_FILE_SIZE還有一個(gè)用場(chǎng):后臺(tái)PHP會(huì)判斷接收到的文件大小是否大于這個(gè)值,如果超出,$_FILES['thisfile'] ['error']會(huì)被設(shè)置為UPLOAD_ERR_FORM_SIZE(2),同時(shí)放棄保存臨時(shí)文件,將$_FILES['thisfile'] ['size']置0。
這個(gè)例子,沒問(wèn)題,表現(xiàn)正常,當(dāng)我試圖上傳一個(gè)40多K的文件時(shí),PHP程序報(bào)告“文件超過(guò)MAX_FILE_SIZE”。
但是,如果我們將表單中的MAX_FILE_SIZE從30000減少到1000,情形又如何呢?

  • 上傳800字節(jié)的文件,正常;
  • 上傳40K的文件,PHP報(bào)告文件過(guò)大,也正常;
  • 上傳3000個(gè)字節(jié)的文件,PHP未報(bào)告錯(cuò)誤,它成功保存了文件!出乎意料!

問(wèn)題就出在main/rfc1867.c中 判斷文件是 否超長(zhǎng)的這部分代碼上。php每次從buffer中讀取FILLUNIT字節(jié)長(zhǎng)度的內(nèi)容后,首先判斷“已經(jīng)讀到的內(nèi)容長(zhǎng)度(total_bytes)”是 否大于MAX_FILE_SIZE,然后再增加“已經(jīng)讀到的內(nèi)容長(zhǎng)度(total_bytes)”。這樣一來(lái),和預(yù)計(jì)的結(jié)果之間至多會(huì)有FILLUNIT 字節(jié)的誤差,而FILLUNIT=1024*5=5K。(點(diǎn)擊bug了解詳細(xì)內(nèi)容)
這就是說(shuō),當(dāng)MAX_FILE_SIZE<5K時(shí),上傳一個(gè)大于MAX_FILE_SIZE,但是小于5K的文件是沒有問(wèn)題的。
當(dāng)然,因?yàn)檫@個(gè)設(shè)置很容易被繞過(guò),所以服務(wù)器端編程不應(yīng)當(dāng)依賴于MAX_FILE_SIZE。而且,5K到底是個(gè)很小的數(shù)值,對(duì)大多數(shù)上傳文件的表單來(lái)說(shuō)沒有影響。

?PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的設(shè)置,和客戶端上傳給服務(wù)器端的流量大小無(wú)關(guān)。
Apache服務(wù)器從客戶端接收長(zhǎng)度不超過(guò)LimitRequestBody字節(jié)數(shù)的請(qǐng)求,然后傳送給php模塊,php模塊再?zèng)Q定是否保存成臨時(shí)文件,設(shè)置$_FILES全局變量,移交給script進(jìn)一步處理。
這個(gè)Apache的LimitRequestBody選項(xiàng)缺省值=0,允許Request body的最大字節(jié)數(shù)是2G(Linux + Apache)

最后還要注意的是:
html本身能夠post數(shù)據(jù)也是有限制的,不能超過(guò)2G。
FTP客戶端有文件偏移指針的2GB邊界限制,未使用特殊編譯flag編譯的ftp服務(wù)器端或者客戶端,無(wú)論在什么FS中都不支持大于2GB的文件。不知道PHP會(huì)不會(huì)也有這種情況。

轉(zhuǎn)載于:https://www.cnblogs.com/datastack/p/3776863.html

總結(jié)

以上是生活随笔為你收集整理的【转载】解决Apache2+PHP上传文件大小限制的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。