Thay đổi kích thước tệp tải lên tối đa


513

Tôi có một trang web được lưu trữ trên PC mà tôi không có quyền truy cập. Tôi có một hình thức tải lên cho phép mọi người tải lên các tệp mp3 lớn lên đến 30 MB. Kịch bản phía máy chủ của tôi được thực hiện trong PHP.

Mỗi lần tôi thử và tải lên một tệp, tôi nhận được một lỗi cho rằng tệp vượt quá kích thước tối đa được phép, vì vậy tôi cần tăng kích thước. Nghiên cứu của tôi trên web đã đề xuất thay đổi .htaccesstệp mà tôi không có quyền truy cập, vì vậy nó sẽ không hoạt động. Những người khác đề nghị tôi nên thêm một php.initệp tùy chỉnh vào thư mục gốc không hoạt động. Bất cứ một đề nghị nào khác?

Câu trả lời:


877

Bạn cần đặt giá trị của upload_max_filesizepost_max_sizetrong php.ini của mình:

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

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

Sau khi sửa đổi (các) tệp php.ini, bạn cần khởi động lại máy chủ HTTP để sử dụng cấu hình mới.

Nếu bạn không thể thay đổi php.ini, bạn sẽ không gặp may. Bạn không thể thay đổi các giá trị này trong thời gian chạy; tải lên tệp lớn hơn giá trị được chỉ định trong php.ini sẽ không thành công do thời gian thực hiện cuộc gọi của bạn đến ini_set.

Xem Mô tả về các lệnh php.ini lõi .


4
bạn có thể biết tuyến đường mặc định mà tệp php.ini được lưu trữ không?
Yo Momma

1
Trên Linux, nó thường nằm trong / etc / php / hoặc một cái gì đó dọc theo các dòng đó. Nếu bạn đang ở trên một máy chủ được chia sẻ, bạn sẽ không gặp may trừ khi nhà cung cấp dịch vụ lưu trữ của bạn đủ hào phóng để cung cấp tệp php.ini cho mỗi người dùng.
Julian Gorset

4
Nếu bạn sử dụng WAMP dưới cửa sổ, bạn có thể chỉnh sửa nó bằng cách nhấp vào biểu tượng WAMP> PHP -> php.ini. Trong Debian, tệp cấu hình của tôi nằm trong / etc / php5 / apache2.
meagar

19
Tôi đề nghị thiết lập một kích thước cao hơn trên post_max_size. Kích thước tổng thể của các trường được đăng có thể cao hơn kích thước tệp, vì vậy nếu bạn gặp trường hợp cạnh của ai đó tải lên tệp 40 MB thì sẽ không thành công do vượt quá post_max_size.
acme

2
Xin lưu ý rằng memory_limit cũng giới hạn kích thước tải lên.
Daniel

151

Bạn có thể thay đổi nó thông qua một .htaccesstập tin.

.htaccesscác tệp được lưu trữ trong cùng thư mục với các .phptệp của bạn . Họ sửa đổi cấu hình cho thư mục đó và tất cả các thư mục con. Bạn chỉ cần sử dụng chúng bằng cách tạo một .htaccesstệp trong thư mục bạn chọn (hoặc sửa đổi nó nếu có).

Việc sau đây sẽ cho phép bạn tăng giới hạn tải lên (nếu nhà cung cấp máy chủ cho phép thay đổi cấu hình PHP qua .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
Có vẻ như nó không luôn luôn hoạt động. Trên máy dev của tôi, thiết lập giá trị phù hợp trong .htaccess đã thực hiện công việc. Tuy nhiên, trên lưu trữ được chia sẻ, cài đặt này không hoạt động tuy nhiên thông báo lỗi hiển thị rằng kích thước tải lên tối đa được phép là giá trị tôi đặt trong .htaccess. Vì vậy, một tình huống rất tồi tệ xảy ra.
Eugeniu Torica

5
Có vẻ như việc thêm này vào .htaccess chỉ hoạt động nếu bạn đang chạy Apache. Hãy thử nó và làm việc tốt cho tôi.
AngelGris

Điều này không hoạt động nếu 2 dòng này trong php.ini không bị lỗi :; Tên cho các tệp php.ini (.htaccess) do người dùng định nghĩa. Mặc định là ".user.ini" ;user_ini.filename = ".user.ini" ; Để tắt tính năng này, đặt tùy chọn này thành giá trị trống;user_ini.filename =
Alan Deep

Đáng lưu ý rằng nếu bạn đang sử dụng apache CGI hoặc Fast CGI, điều này sẽ gây ra 500 lỗi. Gói cái này bên trong <IfModule mod_php7.c> </ IfModule>
Shardj

59

Tôi gặp vấn đề tương tự và tôi đã tạo một tệp .user.ini và đặt nó vào thư mục chứa tập lệnh tải lên. Hơn bên trong tập tin đó tôi đặt hai giá trị này:

  upload_max_filesize = 40M

  post_max_size = 40M

và nó đã làm việc rất tốt cho tôi!


2
Tuyệt quá. Hoạt động với fastcgi được kích hoạt quá. Yêu cầu PHP5.3 hoặc mới hơn.
Ciantic

1
Ok, điều này làm việc trên một máy chủ chia sẻ khi không có gì khác sẽ làm việc. Tuyệt vời tìm thấy.
Edward Potter

55

Bạn cũng có thể sử dụng hàm ini_set (chỉ dành cho phiên bản PHP dưới 5.3):

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

Giống như @acme đã nói, trong php 5.3 trở lên, các cài đặt này là các chỉ thị PHP_INI_PERDIR để chúng không thể được đặt bằng ini_set. Bạn có thể sử dụng user.ini thay thế.


38
Trong các phiên bản PHP gần đây, các cài đặt ini này chỉ là PHP_INI_PERDIR , vì vậy bạn không thể đặt chúng trong tập lệnh của mình. Xem ở đây để biết thêm chi tiết.
acme

46

Để xác định vị trí tệp ini, trước tiên hãy chạy

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

Sau đó mở tệp và thay đổi

upload_max_filesize = 2M
post_max_size = 2M

thay thế 2M bằng kích thước bạn muốn, ví dụ 100M.

Tôi cũng có một bài đăng trên blog với một ít thông tin nữa http://www.seanbehan.com/how-to-increas-or-change-the-file-upload-size-in-the-php-ini- tập tin cho wordpress


5
Nó hiển thị các tập tin như /etc/php5/cli/php.ininhưng tập tin cấu hình của tôi là /etc/php5/apache2/php.ini. Một số loại gây hiểu lầm.
Fredrick Gauss

Có 2 tệp php.ini ... và với lệnh đó trong câu trả lời, nó cho bạn biết bạn đang sử dụng tệp nào! Vì vậy, bạn cần phải thay đổi để có hiệu lực!
lewis4u

40

Tôi có cùng một vấn đề trong quá khứ .. và tôi đã sửa nó thông qua .htaccesstập tin

Khi bạn thực hiện thay đổi về cấu hình php thông qua .htaccessbạn nên đặt cấu hình trong IfModulethẻ, khác là lỗi máy chủ nội bộ sẽ phát sinh.

Đây là một ví dụ, nó hoạt động tốt với tôi:

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

Và đây là giới thiệu php nếu bạn muốn hiểu thêm. http://php.net/manual/en/configuration.changes.php


5
Miễn là bạn có khả năng ghi đè.
Tuyệt

3
Để hỗ trợ PHP.7, hãy thêm cùng một khối với: <IfModule mod_php7.c>
Mostafa

16

Tôi đã giải quyết vấn đề này bằng cách tạo một tệp có tên .user.initrong thư mục chứa tập lệnh PHP (điều này có nghĩa là bất kỳ tập lệnh PHP nào trong thư mục này đều có giới hạn kích thước tệp mới)

Nội dung của .user.ini:

upload_max_filesize = 40M
post_max_size = 40M

2
Đây là giải pháp cho tôi. Chỉ cần hoạt động tốt. Nếu bạn đang sử dụng một khung công tác như codeignitor, ".user.ini" cần ở cùng một nơi với index.php
The Dude

Cảm ơn. Điều đó làm việc cho tôi. Điều này lý tưởng cho việc chia sẻ lưu trữ, nơi bạn không có quyền truy cập vào php.ini. Tôi chỉ muốn nói thêm rằng nó có sẵn kể từ PHP 5.3
yacsha

6

Tôi đã từng gặp vấn đề tương tự. Tôi đã thử ba cách thường được đề xuất:

  1. Hàm.php
  2. php.ini
  3. .htaccess

không có gì nếu giải quyết vấn đề của tôi Tôi đang sử dụng godaddy và đã tìm thấy một giải pháp được đề xuất đó là:

  1. đã vào Web Hosting , sau đó quản lý
  2. Trong Phần mềm, chọn Chọn phiên bản PHP
  3. Chọn Chuyển sang Tùy chọn PHP được tìm thấy ở góc trên cùng bên phải của bảng bằng màu phông chữ: màu xanh
  4. Ở phần dưới cùng, có lẽ bạn sẽ có upload_max_filesize = 2M
  5. Bây giờ, hãy thoải mái thay đổi nó
  6. Hãy chắc chắn nhấp vào nút Lưu !
  7. Bây giờ hãy vào bảng điều khiển wp-admin của bạn, chọn Media rồi Thêm

Voila! Bây giờ bạn có kích thước tệp tải lên tối đa khác nhau :)


6

nhiều lần tôi đã nhận thấy rằng trang web chia sẻ lưu trữ không cho phép thay đổi cài đặt trong các tệp php.ini. người ta thậm chí không thể gửi tập tin .htaaccess. trong tình huống như vậy người ta có thể thử làm theo

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

6

câu trả lời hơi không đầy đủ, 3 điều bạn phải làm

trong php.ini của bản cài đặt php của bạn (lưu ý: tùy thuộc vào việc bạn muốn nó cho CLI, apache hay nginx, hãy tìm php.ini phù hợp để thao tác. Đối với nginx, nó thường nằm ở /etc/php/7.1/fpmnơi 7.1 phụ thuộc vào phiên bản của bạn. /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

hoặc đặt các giá trị khác. Khởi động lại / tải lại apache nếu bạn đã cài đặt apache hoặc php-fpm cho nginx nếu bạn sử dụng nginx.


5

Vâng, tôi muốn thêm 2 xu của tôi ở đây.

Tôi đang sử dụng webhosting được chia sẻ và tôi đã giải quyết vấn đề này nhiều lần, đã cố gắng tự giải quyết nhưng không có kết quả. Cuối cùng tôi đã giải quyết nó thông qua việc kiểm tra các nguồn web khác nhau và liên hệ với nhà cung cấp dịch vụ lưu trữ của tôi. Câu hỏi của tôi là "Làm cách nào tôi có thể thay đổi giá trị php memory_limittrong chia sẻ webhosting?", "Làm cách nào tôi có thể thay đổi giá trị php upload_max_filesizetrong chia sẻ webhosting?", "Làm cách nào tôi có thể thay đổi giá trị php max_input_varstrong chia sẻ webhosting?", "Làm cách nào tôi có thể thay đổi giá trị php max_execution_timetrong chia sẻ webhosting? "," Làm cách nào tôi có thể thay đổi giá trị php max_input_timetrong chia sẻ webhosting? " và nhiều hơn nữa bằng cách cấu hình hoặc thay đổi php.ini hoặc .htaccesstệp. Tôi đã cố gắng thay đổi chúng nhưng vấn đề nảy sinh. Cuối cùng tôi đã liên hệ với nhà cung cấp dịch vụ lưu trữ của mình và hóa ra tôi đã đặt php của mình thành nguồn gốc, họ đã đổi nó thành php 5.6,

"PHP của bạn đã được đặt ở chế độ 'gốc', điều đó có nghĩa là bạn không thể ghi đè các giá trị đó. Tôi đã thay đổi bạn thành '5.6' để bạn có thể đi tốt hơn."

Sau đó, tôi đã kết nối trang web của mình thông qua ftp Filezilla, cũng đừng quên tạo cả dịch vụ ftp của bạn để hiển thị các tệp bị ẩn và máy tính cục bộ của bạn để làm như vậy, vì .htaccesstệp đã bị ẩn trong máy tính xách tay cục bộ và trong trang web của tôi. Nó có sẵn trong thư mục public_html, tôi chỉ cần tải xuống và thêm các mã sau vào cuối tệp và sau đó tải nó trở lại máy chủ:

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

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Mọi thứ đều hoạt động tốt trong thời điểm hiện tại, nếu bất kỳ ai trong số bạn khắc phục được một số vấn đề, vui lòng viết tại đây và cảnh báo tôi để tôi có thể thay đổi các mã được hiển thị ở trên. Nhân tiện, tôi cũng tải lên một số hình ảnh cho thấy sự thay đổi.

Một điều nữa tôi gần như quên đề cập đến cài đặt ZipArchive trên dịch vụ webhosting được chia sẻ của bạn, tôi đã quản lý yêu cầu đó để đánh dấu bằng cách chỉ cần cài đặt php thông qua cpanel của tôi, nhấp vào phần mở rộng bộ chọn php và sau đó đánh dấu vào phần zip, đó là tất cả.

Cảm ơn.

Tái bút: Tôi sẵn sàng thực hành tốt và nếu bạn thấy bất kỳ thực hành xấu nào ở đây xin vui lòng cho tôi biết, tôi sẽ cố gắng thay đổi chúng. Cảm ơn.


4

Có lẽ đây nên là một bình luận cho @ seanb123 và @Fredrick Gauss bình luận về bình luận của anh ấy, nhưng đối với tôi trong Drupal 8.1 với PHP 7, tập tin tôi cần sửa đổi nằm ở đây:

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

Tôi đã sửa đổi có lẽ bốn tệp php.ini khác, bao gồm một tệp mà hệ thống của tôi gọi là "Tệp cấu hình đã tải" ( php -i | grep -i "loaded configuration file") và tệp được tìm thấy trên trang info.php nhưng không có tệp nào giúp được. Chìa khóa để khám phá đường dẫn chính xác đã được tìm thấy trên một trang web từ năm 2012. Họ nói rằng đường dẫn "/etc/php5/apache2/php.ini"đó không được chấp nhận ngay cả TRỞ LẠI nhưng nó đã cho tôi manh mối tìm thấy nó ở đâu. Đối với PHP7, nó khác một chút so với PHP5 nhưng khái niệm này giống nhau.

Có lẽ điều này sẽ giúp một số schmuck bất lực như tôi.

Điều đó đang được nói, câu trả lời cho OP trong trường hợp của tôi sẽ là ai đó có đặc quyền quản trị viên trên hộp sẽ phải làm điều đó.

Trang web đã giúp tôi: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Điều này cũng được giải quyết ở đây: Nhập giới hạn kích thước tệp trong PHPMyAdmin

EDIT: toàn văn ghi chú của tôi cho chính tôi:

Để thay đổi kích thước tải lên tối đa, hãy chỉnh sửa upload_max_filesize và [nếu cần?] Post_max_size trong /etc/php/7.0/apache2/php.ini (hoặc trong các phiên bản cũ hơn: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 khởi động lại

CHỈNH SỬA: vì bạn đang nhập các tệp lớn, bạn có thể cần thay đổi thời gian chờ để xử lý chúng. Trong trường hợp của tôi, ví dụ, tệp có tên "config.default.php" được tìm thấy /usr/share/phpmyadmin/libraries/config.default.phpvới biến $cfg['ExecTimeLimit'] = 300; tôi đã thay đổi thành 900 cho một lần nhập lớn. Sau đó, bạn cần phải khởi động lại apache


3

Không phải những giải pháp đó làm việc cho tôi !! (đã được đặt thành 32M theo mặc định). Vấn đề là trong hầu hết các trường hợpmax_allowed_packet

Tôi đang làm việc trên localhost và sử dụng MAMP.

Đây là giải pháp;

1. Nếu bạn không có my.ini

Thêm vào

--max_allowed_packet=168435456

Đến

...\MAMP\bin\startMysql.sh

2. Nếu bạn có my.ini

Dưới

[mysqld]

Thêm vào

max_allowed_packet=100M

LÀM XONG!


Đã thêm max_allowed_packet = 128M vào cả php.ini và .user.ini và điều đó đã giúp tôi!
Molasar

2

Ba điều bạn cần kiểm tra.

upload_max_filesize, memory_limitpost_max_size trong file cấu hình php.ini chính xác.

Tất cả ba cài đặt này giới hạn kích thước tối đa của dữ liệu có thể được gửi và xử lý bởi PHP.

Thông thường post_max_sizememory_limitcần phải lớn hơn upload_max_filesize.


Vì vậy, tổng ba biến bạn cần kiểm tra để hoàn toàn chắc chắn.


2

Với WAMPtất cả đều khá dễ dàng

WAMP Biểu tượng> PHP> Cài đặt PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M hoặc Chọn (tùy chỉnh)).

Dịch vụ tải lại tự động.

Nhưng, nếu bạn thực sự không có quyền truy cập vào máy chủ, bạn có thể muốn khám phá việc viết chunkingAPI.


0

Tôi cũng gặp vấn đề này và đã khắc phục bằng cách đặt cài đặt này trong /etc/nginx/nginx.conf

client_max_body_size 0;

0, như không giới hạn.

Ngoài ra, nếu bạn có proxy ngược chạy với nginx, máy chủ đó cũng sẽ có cài đặt này (Đây là thứ đã ném tôi ra khỏi đây)


0

Nếu bạn đã chỉnh sửa đúng tệp php.ini, khởi động lại Apache hoặc Nginx và vẫn không hoạt động, thì bạn cũng phải khởi động lại php-fpm :

sudo service php-fpm restart 

0

Vì việc thay đổi toàn cầu có phần rủi ro, tôi đã cố gắng tăng giá trị tải lên tối đa cho một tập lệnh big_file_upload.php . Vì một số lý do ini_setkhông giúp được gì. Sau một số nghiên cứu, tôi đã nghĩ ra điều này. Đặt nó vào .htaccess(trừ khi tên thay đổi qua 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>

Đã làm cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.