Thông báo lỗi này đang được trình bày, bất kỳ đề nghị?
Kích thước bộ nhớ cho phép hết 33554432 byte (đã cố gắng phân bổ 43148176 byte) trong php
Thông báo lỗi này đang được trình bày, bất kỳ đề nghị?
Kích thước bộ nhớ cho phép hết 33554432 byte (đã cố gắng phân bổ 43148176 byte) trong php
Câu trả lời:
Cuối cùng tôi đã tìm thấy câu trả lời:
Chỉ cần thêm dòng dưới đây vào trước dòng bạn gặp lỗi trong tệp của bạn
ini_set('memory_limit', '-1');
Nó sẽ sử dụng bộ nhớ không giới hạn của máy chủ, nó hoạt động tốt.
Cảm ơn đã cho bạn bè gợi ý.
UNLIMITED
.
Dưới đây là hai phương pháp đơn giản để tăng giới hạn lưu trữ được chia sẻ:
Nếu bạn có quyền truy cập vào tệp PHP.ini, hãy thay đổi dòng trong PHP.ini Nếu dòng của bạn hiển thị 32M, hãy thử 64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Nếu bạn không có quyền truy cập vào PHP.ini, hãy thử thêm tệp này vào tệp .htaccess:
php_value memory_limit 64M
Kịch bản của bạn đang sử dụng quá nhiều bộ nhớ. Điều này thường có thể xảy ra trong PHP nếu bạn có một vòng lặp đã hết kiểm soát và bạn đang tạo các đối tượng hoặc thêm vào các mảng trên mỗi lần vượt qua của vòng lặp.
Kiểm tra các vòng lặp vô hạn.
Nếu đó không phải là vấn đề, hãy thử và giúp đỡ PHP bằng cách phá hủy các đối tượng mà bạn đã hoàn thành bằng cách đặt chúng thành null. ví dụ.$OldVar = null;
Kiểm tra mã nơi lỗi thực sự xảy ra là tốt. Bạn có mong đợi rằng dòng đó sẽ được phân bổ một lượng lớn bộ nhớ? Nếu không, hãy thử và tìm ra những gì đã sai ...
Đang làm :
ini_set('memory_limit', '-1');
không bao giờ là tốt Nếu bạn muốn đọc một tệp rất lớn, cách tốt nhất là sao chép từng chút một. Hãy thử mã sau đây để thực hành tốt nhất.
$path = 'path_to_file_.txt';
$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );
while (!feof($file)) {
$output .= fread( $file, $len );
}
fclose($file);
echo 'Output is: ' . $output;
while
vòng lặp:fclose($file)
Thật không may, dễ dàng lập trình trong PHP theo cách tiêu thụ bộ nhớ nhanh hơn bạn nghĩ. Sao chép chuỗi, mảng và đối tượng thay vì sử dụng tài liệu tham khảo sẽ làm điều đó, mặc dù PHP 5 được cho là thực hiện việc này tự động hơn so với PHP 4. Nhưng việc xử lý toàn bộ dữ liệu của bạn qua nhiều bước cũng lãng phí so với xử lý đơn vị logic nhỏ nhất tại một thời điểm. Ví dụ cổ điển đang làm việc với các tập kết quả lớn từ cơ sở dữ liệu: hầu hết các lập trình viên tìm nạp toàn bộ tập kết quả vào một mảng và sau đó lặp lại một hoặc nhiều lần với nó foreach()
. Việc sử dụng một while()
vòng lặp để tìm nạp và xử lý một hàng tại một thời điểm sẽ hiệu quả hơn nhiều . Điều tương tự áp dụng để xử lý một tập tin.
Nếu bạn muốn đọc các tệp lớn, bạn nên đọc chúng từng chút một thay vì đọc chúng cùng một lúc.
Đó là phép toán đơn giản: Nếu bạn đọc một tệp lớn 1 MB cùng một lúc, thì cần ít nhất 1 MB bộ nhớ để giữ dữ liệu.
Vì vậy, bạn nên đọc chúng từng chút một bằng cách sử dụng fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Tôi đã gặp vấn đề tương tự trong php7.2 với laravel 5.6. Tôi chỉ tăng số lượng biến memory_limit = 128M
trong php.ini theo yêu cầu ứng dụng của tôi. Nó có thể là 256M / 512M / 1048M ..... Bây giờ nó hoạt động tốt.
Tôi cũng gặp vấn đề tương tự, tìm kiếm các tập tin phpinfo.ini, php.ini hoặc .htaccess không có kết quả. Cuối cùng tôi đã xem xét một số tệp php, mở chúng và kiểm tra mã bên trong bộ nhớ. Cuối cùng, giải pháp này là những gì tôi đưa ra và nó hiệu quả với tôi. Tôi đã sử dụng wordpress, vì vậy giải pháp này có thể chỉ hoạt động đối với vấn đề giới hạn kích thước bộ nhớ wordpress. Giải pháp của tôi, mở tệp default-constants.php trong thư mục / public_html / wp-gộp . Mở tệp đó bằng trình chỉnh sửa mã và tìm cài đặt bộ nhớ trong wp_initial_constants
phạm vi hoặc chỉ Ctrl + F để tìm từ "bộ nhớ". Ở đó bạn sẽ đến WP_MEMORY_LIMIT
và WP_MAX_MEMORY_LIMIT
. Chỉ cần tăng nó, nó là 64 MB trong trường hợp của tôi, tôi đã tăng nó lên 128 MB và sau đó lên 200 MB.
// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MEMORY_LIMIT', $current_limit );
} elseif ( is_multisite() ) {
define( 'WP_MEMORY_LIMIT', '200M' );
} else {
define( 'WP_MEMORY_LIMIT', '128M' );
}
}
if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
} else {
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
}
}
Btw, xin vui lòng không làm mã sau đây, vì đó là thực tế xấu:
ini_set('memory_limit', '-1');
wp-config.php
thay vào đó, bạn có thể dễ dàng thêm các giới hạn đó vào đó, nơi chúng sẽ không bị ghi đè bởi các bản cập nhật WordPress trong tương lai. Ngoài ra, một vài plugin bảo mật (chẳng hạn như WordFence) sẽ khiếu nại nếu các tệp WordPress của 'lõi' bị thay đổi ...
wp-config.php
và thêm hai dòng ở đó (tức là define( 'WP_MEMORY_LIMIT', '200M' );
và define( 'WP_MAX_MEMORY_LIMIT', '256M' );
không giống như các tệp trên WP 'lõi' (cụ thể là mọi thứ bên dưới wp-includes
), sẽ bị ghi đè bởi các nâng cấp WP, wp-config.php
sẽ không - chính xác là nó dành cho mục đích chính xác của việc ghi đè các hằng số WP!
-1
là tốt cho các quá trình chạy ngắn. Ví dụ: bộ chứa trình tạo php được sử dụng để chạy thử nghiệm đơn vị hoặc cài đặt trình soạn thảo / v.v. Chỉ cần không chạy trang web sản xuất của bạn với nó được thiết lập như thế.
Bạn có thể tăng bộ nhớ cho phép tập lệnh php bằng cách thực thi dòng sau trên tất cả các mã trong tập lệnh:
ini_set('memory_limit','-1'); // enabled the full memory available.
Và cũng phân bổ các biến không mong muốn trong tập lệnh.
Kiểm tra thư viện php này: Giải phóng bộ nhớ với PHP
Tôi nhận thấy nhiều câu trả lời chỉ cố gắng tăng dung lượng bộ nhớ được cung cấp cho một tập lệnh có vị trí của nó nhưng thường xuyên hơn không có nghĩa là một cái gì đó quá tự do với bộ nhớ do khối lượng hoặc kích thước không được tăng cường. Rõ ràng nếu bạn không phải là tác giả của một kịch bản, bạn sẽ cảm thấy xót xa cho tác giả trừ khi bạn cảm thấy có tham vọng :) Các tài liệu PHP thậm chí còn nói rằng các vấn đề về bộ nhớ là do " các kịch bản được viết kém "
Cần phải đề cập rằng ini_set('memory_limit', '-1');
(không có giới hạn) có thể gây mất ổn định máy chủ như 0 bytes free = bad things
. Thay vào đó, hãy tìm sự cân bằng hợp lý bằng những gì tập lệnh của bạn đang cố gắng thực hiện và dung lượng bộ nhớ khả dụng trên máy.
Cách tiếp cận tốt hơn: Nếu bạn là tác giả của kịch bản (hoặc tham vọng), bạn có thể gỡ lỗi các vấn đề bộ nhớ như vậy với xdebug . Phiên bản mới nhất (2.6.0 - phát hành 2018-01-29) đã mang lại cấu hình bộ nhớ cho bạn biết các cuộc gọi chức năng nào đang tiêu thụ một lượng lớn bộ nhớ. Nó phơi bày các vấn đề trong kịch bản mà khó tìm thấy. Thông thường, sự thiếu hiệu quả nằm trong một vòng lặp không mong đợi âm lượng mà nó nhận được, nhưng mỗi trường hợp sẽ được để lại như một bài tập cho người đọc :)
Các tài liệu Xdebug là hữu ích, nhưng nó nắm tới 3 bước sau:
apt-get
và yum
vvxdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Nếu bạn đang cố đọc một tệp, nó sẽ chiếm bộ nhớ trong PHP. Chẳng hạn, nếu bạn đang cố mở và đọc một tệp MP3 (như, nói, $ data = file (" http://mydomain.com/path/sample.mp3 "), nó sẽ kéo tất cả vào bộ nhớ .
Như Nelson gợi ý, bạn có thể làm việc để tăng giới hạn bộ nhớ tối đa nếu bạn thực sự cần sử dụng nhiều bộ nhớ này.
Chúng tôi đã có một tình huống tương tự và chúng tôi đã thử đưa ra ở đầu câu trả lời ini_set ('memory_limit', '-1'); và mọi thứ đều hoạt động tốt, các tệp hình ảnh nén lớn hơn 1MB đến KB.
Nếu bạn đang sử dụng một lưu trữ được chia sẻ, bạn sẽ không thể thực thi gia tăng trong giới hạn kích thước php.
Chỉ cần truy cập cpanel của bạn và nâng cấp phiên bản php của bạn lên 7.1 trở lên thì bạn đã sẵn sàng.
người dùng wordpress thêm dòng:
@ini_set('memory_limit', '-1');
trong wp-settings.php mà bạn có thể tìm thấy trong thư mục gốc đã cài đặt wordpress
Tôi đã có cùng một vấn đề chạy php trong dòng lệnh. Gần đây, tôi đã thay đổi tệp php.ini và đã xảy ra lỗi khi thay đổi php.ini
Đây là cho php7.0
đường dẫn đến php.ini nơi tôi đã mắc lỗi:
/etc/php/7.0/cli/php.ini
Tôi đã đặt memory_limit = 256
(có nghĩa là 256 bytes
)
thay vì memory_limit = 256M
(có nghĩa là 256 Mega bytes
).
; Dung lượng bộ nhớ tối đa mà tập lệnh có thể tiêu thụ (128MB)
; http://php.net/memory-limit
memory_limit = 128M
Khi tôi sửa nó, quy trình của tôi bắt đầu chạy tốt.
Chạy lệnh này trong thư mục gốc Magento của bạn php -d memory_limit=4G bin/magento
Nếu bạn đang sử dụng laravel thì hãy sử dụng những cách này
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
thay vì
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}