簡體   English   中英

更改最大上傳文件大小

[英]Change the maximum upload file size

我有一個網站托管在我無法訪問的 PC 上。 我有一個上傳表單,允許人們上傳最大 30MB 的 mp3 文件。 我的服務器端腳本是在 PHP 完成的。

每次我嘗試上傳文件時,我都會收到一條錯誤消息,聲稱文件超出了允許的最大大小,因此我需要增加大小。 我對 web 的研究建議更改我無權訪問的.htaccess文件,這樣就不起作用了。 其他人建議我應該將自定義php.ini文件添加到我的根目錄,但沒有用。 還有其他建議嗎?

您需要在php.ini中設置upload_max_filesizepost_max_size的值:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

修改php.ini文件后,您需要重新啟動 HTTP 服務器以使用新配置。

如果你不能改變你的php.ini ,那你就不走運了。 您不能在運行時更改這些值; 在執行到達您對ini_set的調用時,上傳大於php.ini中指定值的文件將失敗。

請參閱核心php.ini指令的說明

您可以通過.htaccess文件對其進行更改。

.htaccess文件存儲在與.php文件相同的目錄中。 他們修改該文件夾和所有子文件夾的配置。 您只需通過在您選擇的目錄中創建一個.htaccess文件來使用它們(或修改它,如果存在)。

以下應該使您能夠增加上傳限制(如果服務器提供商允許通過.htaccess更改 PHP 配置)。

php_value upload_max_filesize 40M
php_value post_max_size 42M

我遇到了同樣的問題,我創建了一個 .user.ini 文件並將其放在上傳腳本所在的目錄中。 比在那個文件里面我設置了這兩個值:

  upload_max_filesize = 40M

  post_max_size = 40M

它對我很有用!

您還可以使用ini_set 函數(僅適用於 5.3 以下的 PHP 版本):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

就像@acme 所說,在 php 5.3 及更高版本中,此設置是 PHP_INI_PERDIR 指令,因此無法使用 ini_set 設置它們。 您可以改用 user.ini。

要找到ini文件,首先運行

php -i | grep -i "loaded configuration file"

然后打開文件並更改

upload_max_filesize = 2M
post_max_size = 2M

將 2M 替換為您想要的大小,例如 100M。

我也有一篇關於更多信息的博客文章http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini-文件換wordpress

我過去有同樣的問題..我通過.htaccess文件修復了它

當您通過.htaccess對 php 配置進行更改時,您應該將配置放在IfModule標記中,否則會出現內部服務器錯誤

這是一個例子,它對我來說很好用:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

如果您想了解更多,這是 php 參考。 http://php.net/manual/en/configuration.changes.php

我通過在 PHP 文件腳本所在的目錄中創建一個名為.user.ini的文件解決了這個問題(這意味着該目錄中的任何 PHP 腳本都會獲得新的文件大小限制)

.user.ini的內容是:

upload_max_filesize = 40M
post_max_size = 40M

答案有點不完整,你必須做的 3 件事

在您的 php 安裝的 php.ini 中(注意:取決於您是否希望它用於 CLI、apache 或 nginx,找到要操作的正確 php.ini。對於 nginx,它通常位於/etc/php/7.1/fpm中 7.1取決於你的版本。對於 apache 通常是/etc/php/7.1/apache2 )

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

或設置其他值。 如果您安裝了 apache,則重新啟動/重新加載 apache;如果您使用 nginx,則為 nginx 重新啟動/重新加載php-fpm

很多時候我注意到共享主機的站點不允許更改 php.ini 文件中的設置。 甚至根本無法創建 .htaac​​cess 文件。 在這種情況下,可以嘗試以下事情

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

也許這應該是對@seanb123 和@Fredrick Gauss 評論他的評論的評論,但對我來說,在使用 PHP 7 的 Drupal 8.1 中,我需要修改的文件位於此處:

/etc/php/7.0/apache2/php.ini

我修改了其他四個 php.ini 文件,包括我的系統稱為“加載的配置文件”( php -i | grep -i "loaded configuration file" )的一個,以及在 info.php 頁面上找到的一個,但沒有一個幫助。 發現正確路徑的關鍵是在 2012 年的一個站點上找到的。他們說路徑"/etc/php5/apache2/php.ini"甚至在那時就已被棄用,但它給了我一個線索,在哪里可以找到它。 對於 PHP7,它與 PHP5 略有不同,但概念是相同的。

也許這會幫助一些像我這樣無助的笨蛋。

話雖如此,在我的情況下,對 OP 的回答是必須由具有管理員權限的人來執行此操作。

幫助我的網站: http ://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

這也在這里解決: PHPMyAdmin 中的導入文件大小限制

編輯:我給自己的筆記全文:

要更改最大上傳大小,請編輯 /etc/php/7.0/apache2/php.ini 中的 upload_max_filesize 和 [如果需要?] post_max_size (或舊版本: /etc/php5/apache2/php.ini )

/etc/init.d/apache2 重啟

再次編輯:由於您要導入大文件,您可能需要更改處理它們的超時時間。 在我的例子中,名為“config.default.php”的文件位於/usr/share/phpmyadmin/libraries/config.default.php中,變量$cfg['ExecTimeLimit'] = 300; 例如,我將我的更改為 900 以進行大量導入。 之后你需要重啟apache

我有同樣的問題。 我嘗試了通常建議的三種方法:

  1. 函數.php
  2. php.ini
  3. .htaccess

如果解決了我的問題,則沒有。 我正在使用 godaddy 並遇到了一個建議的解決方案:

  1. 虛擬主機,然后管理
  2. 軟件下選擇選擇 PHP 版本
  3. 選擇在表格右上角找到的切換到 PHP 選項,字體顏色:藍色
  4. 在最底部,您可能會有upload_max_filesize = 2M
  5. 現在,隨意更改它
  6. 一定要點擊保存按鈕!
  7. 現在轉到您的 wp-admin 面板,選擇Media然后添加

瞧! 現在你有一個不同的最大上傳文件大小:)

好吧,我想在這里加我的 2 美分。

我正在使用共享虛擬主機,我多次解決這個問題,試圖自己解決,但無濟於事。 最后,我設法通過檢查各種網絡資源並聯系我的托管服務提供商來解決它。 我的問題是“如何更改共享虛擬主機中的 php 值memory_limit ?”,“如何更改共享虛擬主機中的 php 值upload_max_filesize ?”,“如何更改共享虛擬主機中的 php 值max_input_vars ?”,“如何更改共享虛擬主機中的 php 值max_execution_time ?", "如何更改共享虛擬主機中的 php 值max_input_time ?" 以及更多通過配置或更改 php.ini 或.htaccess文件。 我試圖改變它們,但出現了問題。 最后我聯系了我的托管服務提供商,結果發現我將我的 php 設置為 native,他們將其更改為 php 5.6,這是他們的答案:

“你的 PHP 被設置為‘native’模式,這意味着你不能覆蓋這些值。我已經把你改成了‘5.6’,所以你應該很高興。”

之后我通過 ftp Filezilla 連接了我的網站,也不要忘記讓你的 ftp 服務顯示隱藏文件,並讓你的本地計算機這樣做,因為.htaccess文件隱藏在我的本地筆記本電腦和我的網站中。 它在 public_html 文件夾中,我剛剛下載了它並將以下代碼添加到文件末尾,然后將其上傳回服務器:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

暫時一切正常,如果你們中的任何人克服了一些問題,請寫在這里並警告我,以便我可以更改上面顯示的代碼。 順便說一句,我還上傳了一些顯示變化的圖片。

還有一件事我差點忘了在您的共享虛擬主機服務上安裝 ZipArchive,我只需通過我的 cpanel 進入 php 設置,單擊 php 選擇器擴展,然后勾選 zip 部分,就可以滿足該要求。

謝謝。

PS:我對好的做法持開放態度,如果你在這里看到任何不好的做法,請告訴我,我會嘗試改變它們。 謝謝。

這些解決方案都不適合我!! (已經默認設置為 32M)。問題在大多數情況下是max_allowed_packet

我正在使用 localhost 並使用MAMP

這是解決方案;

1.如果你沒有my.ini

添加

--max_allowed_packet=168435456

...\MAMP\bin\startMysql.sh

2. 如果你有 my.ini

在下面

[mysqld]

添加

max_allowed_packet=100M

完畢!

使用WAMP一切都很簡單

WAMP圖標 > PHP > PHP 設置 > upload_max_filesize = nM > n =(2M、4M、8M、16M、32M、64M、128M、256M、512M 或選擇(自定義))。

服務自動重新加載。

但是,如果您真的無法訪問服務器,您可能想要探索編寫chunking API。

這是有關如何執行此操作的圖像。

在此處輸入圖像描述

由於全局更改有點冒險,我試圖增加單個腳本big_file_upload.php的最大上傳值。 由於某種原因ini_set沒有幫助。 經過一番研究,我想出了這個。 將其放入.htaccess中(除非通過AccessFileName更改名稱)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

為我工作。

您需要檢查的三件事。

upload_max_filesizememory_limitpost_max_size在 php.ini 配置文件中。

所有這三個設置都限制了 PHP 可以提交和處理的最大數據大小。

通常post_max_sizememory_limit需要大於upload_max_filesize


因此,您需要檢查三個變量以絕對確定。

如果您編輯了正確的 php.ini 文件,重新啟動了 Apache 或 Nginx,但仍然無法正常工作,那么您也必須重新啟動php-fpm

sudo service php-fpm restart 

我也有這個問題,並通過在/etc/nginx/nginx.conf中設置此設置來修復它

client_max_body_size 0;

0,如無限。

而且,如果你有一個使用 nginx 運行的反向代理,那么該服務器也應該有這個設置(這就是讓我失望的原因)

現有的答案都有部分解決方案,所以這里是編譯的答案:

解決方案 1:編輯 .htaccess 文件適用於 Apache 服務器

php_value upload_max_filesize 128M
php_value post_max_size 132M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300

解決方案 2:編輯適用於 Wordpress 應用程序的 wp-config.php 文件

@ini_set( 'upload_max_filesize' , '128M' );
@ini_set( 'post_max_size', '132M');
@ini_set( 'memory_limit', '256M' );
@ini_set( 'max_execution_time', '300' );
@ini_set( 'max_input_time', '300' );

解決方案3:編輯php.ini文件適用於nginx服務器或php.ini可修改的地方

upload_max_filesize = 128M
post_max_size = 132M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300

可選:Nginx 服務器
對於 nginx,通過添加client_max_body_size 128M; httpserver塊中的指令。]

設置的重要說明:

  • upload_max_filesize – 將其設置為大於文件大小的值
  • post_max_size – 將其設置為大於您的upload_max_filesize的值,因為發布字段的總體大小可能高於文件大小
  • memory_limit - 將其設置為大於文件大小的值,因為它限制了腳本可能消耗的最大內存量
  • max_execution_time – 每個腳本的最大執行時間,以秒為單位。 如果您的腳本需要很長時間來處理文件,請將其設置為 0(無限)
  • max_input_time - 每個腳本可能花費在解析請求數據上的最長時間。 默認值為 60 秒。 如果腳本需要更多時間,請將其設置為 -1

最后不要忘記重新啟動服務器。 在下面申請適合您的內容:

# if php-fpm is used for processing php
sudo service php7.4-fpm restart

# for nginx
sudo service nginx restart

# for apache
sudo service httpd restart
  1. 打開 php.ini 文件。

  2. 在 php.ini 中搜索諸如 upload_max_filesize 之類的關鍵字。

  3. 然后更改文件的大小。

    upload_max_filesize = 400M

  4. 需要更改最大帖子值。

    post_max_size = 400M

花了幾個小時后,我幾乎瀏覽了所有帖子,但沒有運氣。 最后通過這些步驟解決了問題。 這可能是奇怪的解決方案,但對我有用。

第1步:在/etc文件夾或/文件夾中找到php.ini文件,在cmd下運行:

grep -rl "post_max_size" | xargs ls -lrth

這里我使用 post_max_size 關鍵字在 /etc 文件夾中搜索“php.ini”文件,但在某些系統中,您可以在 /var/www/html 或 /var/www/wordpress 文件夾中找到它。

我們在互聯網上有多個帖子,好像 WordPress 文件夾中不存在 php.ini 文件,那么您可以創建,但在我的情況下這不起作用。

第2步:

編輯 php.ini 文件並像這樣更改值。

post_max_size = 100M   
upload_max_filesize = 100M

在上面,您可以根據需要設置任何值。

第 3 步:

重新啟動 httpd 或 Nginx 或 apache 和 PHP 服務,或者按照設置,您可以重新啟動 Web 服務。

對我來說 httpd 和 php-fpm 服務重啟在 centos 8 中工作:

service httpd restart
service php-fpm restart

您必須找到安裝 php 的位置,您將看到php.ini文件

只需在任何編輯器中打開該文件並替換該值

max_file_upload : 2M

第一個選項:如果您有權編輯 php.ini 文件,請使用此選項。

需要更改php.ini中的upload_max_filesizepost_max_size設置以支持大於 php 默認允許大小的文件。

upload_max_filesize設置為需要上傳的文件的最大大小。

post_max_size應設置為大於upload_max_filesize以處理文件和文件上傳表單的表單post 變量部分的大小。 如果一次在文件上傳表單中上傳多個文件, post_max_size應設置為(upload_max_filesize * 文件數)+ post 變量的大小。

upload_max_filesize=30M
post_max_size=31M

無需更新memory_limitmax_execution_time php 設置,以防文件只是使用 move_uploaded_file 移動到文件上傳 php 腳本中的最終路徑。 但是,如果文件上傳腳本正在處理文件或將文件讀取到變量或執行任何其他使用內存和時間等的處理,則應設置memory_limitmax_execution_time

memory_limit設置為 php 腳本運行所需的內存量,將max_execution_time設置為運行腳本所需的時間(以秒為單位)。

memory_limit = 100M
max_execution_time = 120

更改 php.ini 后重啟網絡服務器使其生效。

第二個選項:如果您無權更新全局 php.ini 設置或提高安全性,請使用此選項。

將上傳的 php 腳本復制到一個新的子文件夾,比如“上傳”並在新文件夾中創建一個文件“.user.ini”。 還要確保更新文件上傳表單操作屬性以發布到“上傳”文件夾下的新腳本。

將以下設置添加到新創建的文件中。 “.user.ini”。

upload_max_filesize=30M
post_max_size=31M

;below are optional
memory_limit = 100M
max_execution_time = 120

"user_ini.filename" php.ini 設置可以更新為用戶設置文件另一個名稱。

此選項提高了安全性,因為僅針對新文件夾中的腳本更改了upload_max_filesize、post_max_size、memory_limit、max_execution_time,並且不會影響其他文件夾中腳本的 php 設置,並防止不良腳本使用任何不必要的資源。

有關“.user.ini”設置的更多信息,請參閱以下鏈接

https://www.php.net/manual/en/configuration.changes.modes.php

https://www.php.net/manual/en/ini.list.php

https://www.php.net/manual/en/configuration.file.per-user.php

重新啟動網絡服務器以使新的 .user.ini 更改生效。

筆記:

也可以使用ini_setset_time_limit函數在 php 上傳腳本中設置memory_limitmax_execution_time設置,而不是更新 php.ini 文件。

如果使用此選項,則無需更新 ini 文件中的memory_limitmax_execution_time設置。

將下面添加到 php 文件上傳腳本的頂部

ini_set('memory_limit', '100M');
set_time_limit(120);

我知道這個問題有很多答案,但在php.ini中,大多數以下變量僅對更改最大上傳文件大小有用

由於有時用戶更新了最大文件大小但沒有更新 memory 限制,因此導致導入過程中斷。

所以在這里我列出了所有需要更改的相關變量以及最大文件大小

  • 最大執行時間
  • 內存限制
  • 顯示錯誤
  • post_max_size
  • upload_max_filesize
  • 最大輸入時間

注意:從現在開始,ini 存儲在類似這樣的文件夾中
/etc/php/8.1/apache2/php.ini

暫無
暫無

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

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