Thay đổi upload_max_filesize trên PHP


84

Tôi đang sử dụng PHP 5.3.0 và đã gặp phải thứ gì đó có thể là lỗi (trong trường hợp đó tôi sẽ báo cáo nó) hoặc có thể là tôi - vì vậy tôi yêu cầu đảm bảo.

Khi chạy mã này:

<?php
ini_set('upload_max_filesize', '10M');
echo ini_get('upload_max_filesize'), ", " , ini_get('post_max_size')

Tôi kết thúc với:

2M, 8M

Điều này là bất chấp việc thiết lập php.ini của tôi cao hơn:

upload_max_filesize = 10M
post_max_size = 10M

(chỉ xảy ra một lần)

Vì lỗi xảy ra sau khi đặt giá trị cũng như giá trị được đặt trong php.ini nên tôi có khuynh hướng nghĩ đó là lỗi. Bất cứ ai có thể xác nhận hoặc chỉ cho tôi nơi tôi đang làm sai?

Cập nhật : Có vẻ như việc khởi động lại Apache đã khắc phục sự cố này - Tôi luôn nghĩ rằng nó không cần phải khởi động lại nếu bạn thay đổi php.ini.


9
"Tôi luôn nghĩ rằng nó không cần phải khởi động lại nếu bạn đã thay đổi php.ini." PHP CLI nhận các thay đổi ngay lập tức, vì nó phân tích cú pháp php.ini với mọi lệnh gọi. mod_php phân tích cú pháp php.ini một lần - khi apache khởi động.
Frank Farmer,

Tôi đã có cùng một vấn đề gần đây. upload_max_filesize sẽ không có hiệu lực nếu không khởi động lại Apache. Tôi đang sử dụng PHP 5.2.9. Sau khi khởi động lại, mọi thứ vẫn hoạt động bình thường.
Haluk

Để tránh một apache khởi động lại đầy đủ, chỉ cần sử dụng "sudo dịch vụ apache2 tải lại"
user1048839

Câu trả lời:


68

Bạn không thể sử dụng ký hiệu viết tắt để đặt các giá trị cấu hình bên ngoài PHP.ini. Tôi cho rằng nó giảm trở lại 2MB làm mặc định được biên dịch khi gặp giá trị xấu.

Mặt khác, tôi không nghĩ rằng upload_max_filesizecó thể được thiết lập bằng cách sử dụng ini_set(). Các danh sách "chính thức" khẳng định rằng nó là PHP_INI_PERDIR.


10
Bạn nghĩ đúng! Bạn không thể đặt upload_max_filesize bằng ini_set () vì upload_max_filesize là loại PHP_INI_PERDIR có nghĩa là chỉ có thể thay đổi thông qua: php.ini, .htaccess hoặc httpd.conf như đã nêu tại: php.net/manual/en/configuration.changes.modes. php
Marco Demaio

2
Trên thực tế, bạn có thể sử dụng ký hiệu viết tắt bên ngoài PHP.ini; bạn có thể sử dụng nó trong .htaccessvà cả với ini_set. Tuy nhiên, có lẽ không phải trong tất cả các phiên bản.
Người bảo vệ một

70

Bạn có đang sử dụng nhà cung cấp dịch vụ lưu trữ được chia sẻ không? Đó có thể là cài đặt chính ghi đè bất kỳ thứ gì bạn đang cố gắng thay đổi. Bạn đã thử thêm chúng vào .htaccess của mình chưa?

php_value upload_max_filesize 10M
php_value post_max_size 10M

1
Không, đây là phiên bản Apache / PHP của riêng tôi trên máy của tôi (là Windows nếu nó có liên quan). Tôi sẽ thử thêm chúng vào cấu hình Apache.
Ross

5
Cập nhật: Điều này có ảnh hưởng đến nó (thay đổi chúng thành 10) để phương pháp này hoạt động. Tôi vẫn khá bối rối tại sao nó không hoạt động trong php.ini hoặc sử dụng ini_set.
Ross

+1 đây chắc chắn là cách để đi nếu bạn không thể truy cập php.ini - cảm ơn bạn rất nhiều.
Alex Coplan

3
Lưu ý rằng điều này chỉ hoạt động với Apache chạy PHP dưới dạng Mô-đun, không hoạt động dưới dạng CGI
ChrisV

Tôi sẽ nói rằng đây là phương pháp được ưa thích ngay cả khi có quyền truy cập vào php.initệp. Cho phép bạn đặt các quyền này dựa trên nhu cầu thay vì cài đặt chung.
Bryant Jackson

42

Vì tôi vừa gặp sự cố này trên một máy chủ được chia sẻ và không thể thêm các giá trị vào tệp .htaccess của mình, tôi nghĩ rằng tôi muốn chia sẻ giải pháp của mình.

Tôi đã tạo một tệp ini với các giá trị trong đó. Đơn giản như thế:

Tạo một tệp có tên ".user.ini" và thêm các giá trị của bạn

upload_max_filesize = 150M
post_max_size = 150M

Boom, vấn đề đã được giải quyết.


Đã làm cho tôi! Cảm ơn!
Justin Putney

4
"Ngoài tệp php.ini chính, PHP còn quét các tệp INI trong mỗi thư mục, bắt đầu từ thư mục của tệp PHP được yêu cầu và hoạt động theo cách của nó tới gốc tài liệu hiện tại." php.net/manual/en/configuration.file.per-user.php
đến

1
Hoạt động tuyệt vời với một trang web wordpress! Cảm ơn!
avenged_badger

Điều này rất hiệu quả vì tôi không thể làm điều đó từ .htaccess. Cảm ơn anh bạn!
chiến lược

PHP theo mặc định đọc lại tệp user.ini 5 phút một lần. Vì vậy, hãy kiên nhẫn nếu kết quả không xuất hiện ngay lập tức
Andrey Yaremenko

10

Tôi đã làm việc này bằng cách sử dụng tệp .user.ini trong cùng thư mục với tập lệnh index.php tải ứng dụng của tôi. Đây là nội dung:

upload_max_filesize = "20M"
post_max_size = "25M"

Đây là giải pháp được đề xuất cho Heroku.


5

Điều này cũng có thể được kiểm soát bằng cấu hình apache. Kiểm tra httpd.conf và / hoặc .htaccess để tìm thông tin như sau:

php_value upload_max_filesize 10M

0

Nếu bạn đang chạy trong một máy chủ cục bộ, chẳng hạn như wamp hoặc xampp, hãy đảm bảo rằng nó đang sử dụng php.ini mà bạn nghĩ. Các máy chủ này thường mặc định là php.ini không có trong thư mục tài liệu html của bạn.


0

Giải pháp này chỉ có thể được áp dụng nếu sự cố là do cài đặt WordPress!

Nếu bạn không có quyền truy cập FTP hoặc quá lười để chỉnh sửa tệp,

Bạn có thể sử dụng plugin Tăng kích thước tệp tải lên tối đa để tăng kích thước tệp tải lên tối đa.


0

Theo mặc định, PHP cho phép tải lên tệp tối đa 2 MB trên máy chủ. Nhưng bạn có thể sửa đổi kích thước tối đa của tệp tải lên tùy theo điều kiện của bạn. Bằng cách sử dụng tệp cấu hình PHP php.ini, bạn có thể tăng hoặc giảm kích thước tải lên tệp trong PHP.

Đầu tiên, mở tệp php.ini trong trình soạn thảo văn bản của bạn. Tìm kiếm biến upload_max_filesize và quy định kích thước bạn muốn tăng.

Tìm kiếm biến post_max_size và quy định kích thước bạn muốn tăng.

post_max_size = 128M

bạn có thể kiểm tra điều này từ đây


-1

nếu bạn sử dụng ini_set một cách nhanh chóng thì bạn sẽ tìm thấy ở đây http://php.net/manual/en/ini.core.php thông tin ví dụ: upload_max_filesize và post_max_size không thể thay đổi nhanh chóng (PHP_INI_PERDIR).

Chỉ thay đổi cấu hình php.ini, .htaccess hoặc vhost dường như thay đổi các biến này.



-11

Bạn cũng có thể sử dụng trong tệp php như thế này

<?php ini_set('upload_max_filesize', '200M'); ?>
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.