2011-06-11 51 views
5

Tôi gặp lỗi này khi người dùng tải lên hình ảnh trên trang web của tôi.Lỗi nghiêm trọng PHP: Hết bộ nhớ (được phân bổ 80740352) (đã cố gắng phân bổ 12352 byte) trong

Thông báo lỗi là "Lỗi nghiêm trọng PHP: Hết bộ nhớ (được phân bổ 80740352) (cố gắng phân bổ 12352 byte) trong/home ......." Làm cách nào để khắc phục điều này bằng php.ini?

Dưới đây là các thiết lập upload php.ini hiện tại của tôi

upload_max_filesize = 2000M ; 
post_max_size = 2000M 
max_file_uploads = 8 

Bất cứ ý tưởng gì khác tôi cần phải thêm để giải quyết lỗi này?

+1

Đó là tập lệnh của bạn đang ăn quá nhiều bộ nhớ với bất kỳ thứ gì mà nó đang làm, chứ không phải tải lên mỗi lần! – deceze

+0

có thể trùng lặp của [Làm thế nào để bạn gỡ lỗi php "Out of Memory" vấn đề?] (Http://stackoverflow.com/questions/6114155/how-do-you-debug-php-out-of-memory-issues) – Gordon

Trả lời

8

Giá trị tối ưu memory_limit phụ thuộc vào những gì bạn đang làm với các tập tin tải lên. Bạn có đọc các tập tin vào bộ nhớ bằng cách sử dụng file_get_contents hoặc thư viện GD? Trong trường hợp đó, tăng memory_limit lên ít nhất giống như upload_max_filesize, tốt hơn nữa.

Nếu bạn đang sử dụng GD, hãy nhớ rằng GD giữ toàn bộ hình ảnh không nén trong bộ nhớ. Điều này có nghĩa là phải mất bộ nhớ trong phạm vi width * height * bit-depth, ví dụ: 1024*768*32 = 25 165 824 bits = 3 MB cho ảnh chụp màn hình hoặc nhiều nhất là 55 MB cho hình ảnh 14 megapixel.

Một số thao tác có thể cần tạo bản sao của hình ảnh, vì vậy hãy cân nhắc thiết lập memory_limit thành gấp đôi những gì bạn cần để giữ hình ảnh trong bộ nhớ. Ngoài ra, hãy đảm bảo không tải tất cả hình ảnh vào bộ nhớ cùng một lúc nếu bạn không phải. Bạn có thể giải phóng bộ nhớ được GD sử dụng bằng cách gọi imagedestroy trên tay cầm khi bạn hoàn thành công việc với hình ảnh.

2

Tăng giới hạn bộ nhớ của bạn từ php.ini

memory_limit = ... 
+0

Bất kỳ đề xuất nào về giá trị nếu người dùng nói là tải lên 6 hình ảnh 1MB cùng một lúc? – daza166

+0

Mặc định của tôi là 128Mb và tôi không nghĩ rằng nó sẽ gây ra vấn đề, nhưng bạn có thể cần phải thử. Thử tải lên 6 hình ảnh 2MB và sau đó tăng giá trị cho đến khi bạn sẽ không gặp bất kỳ lỗi nào. Ngoài ra, hãy chắc chắn rằng người dùng của bạn sẽ không tải lên hình ảnh RAW có thể vượt quá 10MB, tôi khuyên bạn nên giảm kích thước tải lên tối đa. –

0

Tệp đã tải lên được lưu trong bộ nhớ, vì vậy bạn cũng nên tăng bộ nhớ ít nhất bằng cùng kích thước tệp mong muốn.

memory_limit = 2000M // better 2200M or above, just in case. 
7
set_time_limit(0); 
ini_set('memory_limit', '20000M'); 

Để đầu kịch bản của bạn. Thay đổi 20000M cho phù hợp.

Các vấn đề liên quan