簡體   English   中英

如何防止大型Apache / PHP文件上傳失敗?

[英]How can I prevent large Apache/PHP file uploads from failing?

我最近在我們的一台服務器上安裝了一個PHP下載門戶。 一切正常,但用戶無法上傳大文件(~20 MB)。

我將以下設置設置為極大值或無限制:

memory_limit
upload_max_filesize
post_max_size
memory_limit

這里有完整的php.inihttp//pastebin.com/NrqJvMVM

但重啟服務器后仍然失敗。

我錯過了一個設置嗎? 我是否必須更新Apache配置中的任何值? 公司防火牆可能會以某種方式干擾嗎?

編輯:我檢查了phpinfo(),主配置仍顯示舊值。 但是,配置文件C:\\ Windows \\ php.ini具有新值。 我使用了錯誤的配置文件。

您也可以在腳本中測試參數。 也許這有助於:

  1. max_execution_time = ini_set(“max_execution_time”,“ - 1”);
  2. post_max_size = ini_set(“post_max_size”,“200M”);
  3. memory_limit = ini_set(“memory_limit”,“200M”);
  4. upload_max_filesize = ini_set(“upload_max_filesize”,“200M”);

在.htaccess中:

php_value upload_max_filesize 200M

php_value memory_limit 256M

php_value max_execution_time 18000

以下是關於此主題的好文章: http//www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

是否在您的服務器上安裝了Suhosin,或者您使用的是fcgi ;-)?

安裝的所有配置設置都包含在php.ini文件中 有時,這些設置可能會被apache .htaccess文件中的指令覆蓋,甚至可能會被腳本本身覆蓋。

以下我們需要修改的設置 -

  • file_uploads
  • 的upload_max_filesize
  • max_input_time設置
  • memory_limit的
  • 的max_execution_time
  • 的post_max_size

配置設置詳見下文。

  • upload_max_filesize和post_max_size

    文件通常以稱為“multipart / form-data”的格式發布到網絡服務器。 post_max_size設置腳本以這種方式可以接受的數據量的上限。 理想情況下,此值應大於您為upload_max_filesize設置的值。

    重要的是要意識到upload_max_filesize是您要上傳的所有文件的大小的總和。 post_max_size是upload_max_filesize加上表單中所有其他字段的長度加上編碼器可能包含的任何mime標頭的總和。 由於這些字段通常較小,因此您通常可以將上傳最大尺寸近似為后最大尺寸。

    根據PHP文檔,您可以在HTML表單中設置MAX_UPLOAD_LIMIT以建議對瀏覽器的限制。

  • memory_limit的

    當PHP引擎處理傳入的POST時,它需要將一些傳入的數據保留在內存中。 只有在配置時使用了--enable-memory-limit選項,該指令才有效。 設置太高的值可能非常危險,因為如果同時處理多個上載,則所有可用內存都將用完,而消耗大量內存的其他不相關腳本也可能影響整個服務器。

  • max_execution_time和max_input_time

    這些設置定義腳本的最長生命周期以及腳本在接受輸入時應花費的時間。 如果傳輸幾個兆字節的數據,則max_input_time應該相當高。 您可以通過調用腳本中的set_time_limit()函數來覆蓋ini文件中max_input_time的設置。

添加評論

  • Apache設置

    apache webserver具有LimitRequestBody配置指令,該指令限制所有POST數據的大小,而不管使用的Web腳本語言如何。 某些RPM安裝將請求主體限制為512Kb。 您需要將其更改為更大的值或完全刪除條目。

  • 其他選擇

    如果您希望在您的網站上處理大量並發文件傳輸,請考慮使用perl或java服務器端組件。 PHP恰好是我們最喜歡的Web編程語言,但perl和Java在文件上傳方面略微領先。

也可以看看:

  1. 使用php上傳大文件高達100MB
  2. 使用php,apache上傳大文件
  3. PHP:上傳大文件失敗

也許, 這篇文章可以幫到你。 您可以將參數添加到.htaccess

你已經寫了兩次post_max_size變量,如果0和第二個值是9999M,則從第一個值開始,刪除第一個並嘗試它。

我使用了錯誤的配置文件。

好吧,phpinfo()告訴你你正在使用哪一個。 查看輸出頂部附近的Configuration File (php.ini) PathLoaded Configuration File

可能沒有正確設置MAX_FILE_SIZE ...

<form enctype="multipart/form-data" action="index.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
<input name="filedata" type="file" />
<input type="submit" value="Send file" />
</form>

你應該找到正確的php.ini文件=)

我過去一直在你的情況下,我發現最好的解決方案是使用第三方庫將文件分割成客戶端的塊並將它們全部重新組合在服務器上。 我發現了這個: http//www.plupload.com/

非常方便有效。 它適用於各種不同的技術,因此可以在大多數客戶機器上運行。 (flash,silverlight,html5 file api aso ...)干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM