Это сообщение об ошибке представляется, какие-либо предложения?
Разрешенный объем памяти 33554432 байт исчерпан (попытался выделить 43148176 байт) в php
Это сообщение об ошибке представляется, какие-либо предложения?
Разрешенный объем памяти 33554432 байт исчерпан (попытался выделить 43148176 байт) в php
Ответы:
Наконец я нашел ответ:
Просто добавьте эту строку ниже перед строкой, когда вы получаете сообщение об ошибке в вашем файле.
ini_set('memory_limit', '-1');
Это займет неограниченное использование памяти сервера, работает нормально.
Спасибо за предложение друзей.
UNLIMITED
.
Вот два простых способа увеличить лимит на виртуальный хостинг:
Если у вас есть доступ к файлу PHP.ini, измените строку в PHP.ini. Если ваша строка показывает 32M, попробуйте 64M:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Если у вас нет доступа к PHP.ini, попробуйте добавить это в файл .htaccess:
php_value memory_limit 64M
Ваш скрипт использует слишком много памяти. Это часто может происходить в PHP, если у вас есть цикл, который вышел из-под контроля, и вы создаете объекты или добавляете в массивы на каждом проходе цикла.
Проверьте на бесконечные петли.
Если это не проблема, попробуйте помочь PHP, уничтожив объекты, с которыми вы покончили, установив их в null. например.$OldVar = null;
Проверьте код, где на самом деле происходит ошибка. Вы ожидаете, что эта строка будет выделять огромное количество памяти? Если нет, попробуйте выяснить, что пошло не так ...
Делать:
ini_set('memory_limit', '-1');
никогда не бывает хорошо Если вы хотите прочитать очень большой файл, рекомендуется копировать его постепенно. Попробуйте следующий код для лучшей практики.
$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
цикла:fclose($file)
К сожалению, в PHP легко программировать так, что он потребляет память быстрее, чем вы думаете. Копирование строк, массивов и объектов вместо использования ссылок сделает это, хотя PHP 5 должен делать это более автоматически, чем в PHP 4. Но работа с вашим набором данных за несколько шагов также расточительна по сравнению с обработкой наименьшей логической единицы вовремя. Классический пример - работа с большими наборами результатов из базы данных: большинство программистов извлекают весь набор результатов в массив и затем зацикливают его один или несколько раз foreach()
. Намного более эффективно использовать while()
цикл для извлечения и обработки по одной строке за раз. То же самое относится и к обработке файла.
Если вы хотите читать большие файлы, вы должны читать их постепенно, а не читать сразу.
Это простая математика: если вы читаете файл размером 1 МБ за один раз, то для хранения данных требуется как минимум 1 МБ памяти.
Поэтому вы должны читать их постепенно, используя fopen
& fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Я столкнулся с той же проблемой в php7.2 с laravel 5.6. Я просто увеличиваю количество переменных memory_limit = 128M
в php.ini, как того требуют мои приложения. Это может быть 256M / 512M / 1048M ..... Теперь все работает нормально.
У меня тоже была такая же проблема, я искал файлы phpinfo.ini, php.ini или .htaccess безрезультатно. Наконец, я посмотрел на некоторые файлы php, открыл их и проверил коды внутри памяти. В конце концов, это было то, что я выбрал, и оно сработало для меня. Я использовал WordPress, так что это решение может работать только для проблемы ограничения размера памяти WordPress. Мое решение - открыть файл default-constants.php в папке / public_html / wp-includes . Откройте этот файл с помощью редактора кода и найдите параметры памяти в wp_initial_constants
области видимости, или просто нажмите Ctrl + F, чтобы найти слово «память». Там вы приедете WP_MEMORY_LIMIT
и WP_MAX_MEMORY_LIMIT
. Просто увеличьте его, в моем случае это было 64 МБ, я увеличил его до 128 МБ, а затем до 200 МБ.
// 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' );
}
}
Кстати, пожалуйста, не делайте следующий код, потому что это плохая практика:
ini_set('memory_limit', '-1');
wp-config.php
вместо этого вы можете очень легко добавить эти ограничения , где они не будут перезаписаны будущими обновлениями WordPress. Кроме того, несколько плагинов безопасности (например, WordFence) будут жаловаться, если «основные» файлы WordPress изменены ...
wp-config.php
. И добавить две строки (я .e define( 'WP_MEMORY_LIMIT', '200M' );
и define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. В отличие от файлов на «основной» WP (а именно, все под wp-includes
), которые будут перезаписаны обновления WP, wp-config.php
не будет - это есть именно для Точная цель переопределения констант WP!
-1
хорошо для коротких процессов. Например, контейнер компоновщика php, который используется для запуска модульных тестов или для компоновщика / etc. Только не запускайте свою производственную площадку с такой настройкой.
Вы можете увеличить объем памяти, разрешенный PHP-скрипту, выполнив следующую строку над всеми кодами в скрипте:
ini_set('memory_limit','-1'); // enabled the full memory available.
А также де выделить нежелательные переменные в сценарии.
Проверьте эту библиотеку php: освобождение памяти с помощью PHP
Я заметил, что многие ответы просто пытаются увеличить объем памяти, выделяемый скрипту, который имеет свое место, но чаще всего это означает, что что-то слишком либерально с памятью из-за непредвиденного объема или размера. Очевидно, что если вы не являетесь автором сценария, то это зависит от автора, если только вы не амбициозны :) Документы PHP даже говорят, что проблемы с памятью связаны с " плохо написанными сценариями ".
Следует отметить, что ini_set('memory_limit', '-1');
(без ограничений) может вызвать нестабильность сервера, как 0 bytes free = bad things
. Вместо этого найдите разумный баланс между тем, что пытается сделать ваш скрипт, и объемом доступной памяти на машине.
Лучший подход: если вы автор сценария (или амбициозный), вы можете отладить такие проблемы с памятью с помощью xdebug . Последняя версия (2.6.0 - выпущена 2018-01-29) вернула профилирование памяти, которое показывает, какие вызовы функций занимают большие объемы памяти. В скрипте выявляются проблемы, которые иначе трудно найти. Как правило, недостатки заключаются в цикле, который не ожидает объем, который он получает, но каждый случай будет оставлен читателю в качестве упражнения :)
Документация по xdebug полезна, но сводится к 3 шагам:
apt-get
и yum
т. Д.xdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Если вы пытаетесь прочитать файл, это займет память в PHP. Например, если вы пытаетесь открыть и прочитать файл MP3 (например, $ data = file (" http://mydomain.com/path/sample.mp3 "), он собирается вытянуть все это в память ,
Как предполагает Нельсон, вы можете увеличить максимальный лимит памяти, если вам действительно нужно использовать столько памяти.
У нас была похожая ситуация, и мы опробовали данные в верхней части ответов ini_set ('memory_limit', '-1'); и все работало нормально, сжатые файлы изображений размером более 1 МБ в КБ.
Если вы используете общий хостинг, вы не сможете принудительно увеличить ограничение размера php.
Просто зайдите на свою cpanel и обновите свою версию php до 7.1 и выше, и тогда все готово.
Я не обновил свой хостинг, и база данных была доступна только для чтения. Joomla нужно было написать сессию и не смог этого сделать.
У меня была та же проблема, что запуск PHP в командной строке. Недавно я изменил файл php.ini и сделал ошибку при изменении php.ini
Это для php7.0
путь к php.ini, где я ошибся:
/etc/php/7.0/cli/php.ini
Я установил memory_limit = 256
(что означает 256 bytes
)
вместо memory_limit = 256M
(что означает 256 Mega bytes
).
; Максимальный объем памяти, который может потреблять скрипт (128 МБ)
; http://php.net/memory-limit
memory_limit = 128M
Как только я исправил это, мой процесс начал работать нормально.
Запустите эту команду в корневом каталоге Magento. php -d memory_limit=4G bin/magento
если вы используете Laravel, то используйте эти способы
public function getClientsListApi(Request $request){
print_r($request->all()); //for all request
print_r($request->name); //for all name
}
вместо того
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}