Допустимый размер памяти 33554432 байт исчерпан (пытался выделить 43148176 байт) в php

Представлено это сообщение об ошибке, любые предложения?

Допустимый размер памяти 33554432 байт исчерпан (пытался выделить 43148176 байт) в php

Ответ 1

Наконец-то я нашел ответ:

Просто добавьте эту строку ниже до того, как вы получите ошибку в вашем файле

ini_set('memory_limit', '-1');

Это займет неограниченное использование памяти сервером, оно отлично работает.

Спасибо за предложение друзьям.

Ответ 2

Вот два простых способа увеличить лимит на общем хостинге:

  • Если у вас есть доступ к вашему файлу 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

Ответ 3

В вашем script используется слишком много памяти. Это может часто возникать в PHP, если у вас есть цикл, который закончился из-за контроля, и вы создаете объекты или добавляете массивы на каждом проходе цикла.

Проверьте наличие бесконечных циклов.

Если это не проблема, попробуйте и помогите PHP, уничтожив объекты, которые вы закончили, установив их в null. например. $OldVar = null;

Проверьте код, где происходит ошибка. Вы ожидаете, что эта линия будет выделять массивный объем памяти? Если нет, попробуйте и выясните, что пошло не так...

Ответ 4

Выполнение:

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;

Ответ 5

К сожалению, легко программировать на PHP таким образом, который потребляет память быстрее, чем вы понимаете. Копирование строк, массивов и объектов вместо использования ссылок сделает это, хотя PHP 5 должен делать это более автоматически, чем в PHP 4. Но обработка вашего набора данных целиком на несколько этапов также расточительна по сравнению с обработкой наименьшего логического блока вовремя. Классический пример - работа с большими результирующими наборами из базы данных: большинство программистов извлекают весь набор результатов в массив, а затем чередуют его один или несколько раз с помощью foreach(). Эффективнее использовать цикл while() для сбора и обработки одной строки за раз. То же самое относится к обработке файла.

Ответ 6

Если вы хотите читать большие файлы, вы должны читать их пополам, а не читать их сразу.
Его простая математика: если вы одновременно читаете крупный файл размером 1 МБ, то для хранения данных требуется не менее 1 МБ памяти.

Итак, вы должны читать их по биту, используя fopen и fread.

Ответ 7

Я столкнулся с той же проблемой в php7.2 с laravel 5.6. Я просто увеличиваю количество переменной memory_limit = 128M в php.ini, как того требуют мои приложения. Это может быть 256M/512M/1048M..... Теперь все работает нормально.

Ответ 8

Вы можете увеличить память, разрешенную для php script, выполнив следующую строку над всеми кодами в script:

ini_set('memory_limit','-1'); // enabled the full memory available.

А также выделите нежелательные переменные в script.

Проверьте эту библиотеку php: Освободите память с помощью PHP

Ответ 9

У меня также была такая же проблема, я искал файлы 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' );
    }
}

Btw, пожалуйста, не делайте следующий код, потому что эта плохая практика:

ini_set('memory_limit', '-1');

Ответ 10

Если вы пытаетесь прочитать файл, это займет память в PHP. Например, если вы пытаетесь открыть и прочитать файл MP3 (например, $data = file ( " http://mydomain.com/path/sample.mp3" ) он все равно потянет в память.

Как указывает Нельсон, вы можете работать, чтобы увеличить максимальный предел памяти, если вам действительно нужно использовать эту большую память.

Ответ 11

У нас была аналогичная ситуация, и мы опробовали данные в верхней части ответов ini_set ('memory_limit', '-1'); и все работало отлично, сжатые файлы изображений размером более 1 МБ в КБ.

Ответ 12

Я заметил, что многие ответы просто пытаются увеличить объем памяти, выделяемый сценарию, который имеет свое место, но чаще всего это означает, что с памятью что-то слишком либерально из-за непредвиденного объема или размера. Очевидно, что если вы не являетесь автором сценария, то это зависит от автора, если только вы не амбициозны :) Документы PHP даже говорят, что проблемы с памятью связаны с " плохо написанными сценариями ".

Следует упомянуть, что ini_set('memory_limit', '-1'); (без ограничений) может привести к нестабильности сервера, так как 0 bytes free = bad things. Вместо этого найдите разумный баланс между тем, что пытается сделать ваш скрипт, и объемом доступной памяти на машине.

Лучший подход: если вы автор сценария (или амбициозный), вы можете отладить такие проблемы с памятью с помощью xdebug. Последняя версия (2.6.0 - выпущена 2018-01-29) вернула профилирование памяти, которое показывает, какие вызовы функций занимают большие объемы памяти. В скрипте выявляются проблемы, которые иначе трудно найти. Как правило, неэффективность находится в цикле, который не ожидает объем, который он получает, но каждый случай будет оставлен читателю в качестве упражнения :)

Документация по xdebug полезна, но сводится к 3 шагам:

  1. Установите его - доступно через apt-get yum т.д.
  2. Настройте его - xdebug.ini: xdebug.profiler_enable = 1, xdebug.profiler_output_dir =/where/ever/
  3. Просмотр профилей в инструменте, как QCacheGrind, KCacheGrind

Ответ 13

ini_set('memory_limit', '-1');

Ответ 14

Запись

ini_set('memory_limit', '-1');

в вашем index.php вверху после открытия тега php

Ответ 15

пользователи Wordpress добавляют строку:

@ini_set('memory_limit', '-1');

в wp-settings.php, который вы можете найти в установленной корневой папке wordpress

Ответ 16

Я не обновил свой хостинг, и база данных была доступна только для чтения. Joomla необходимо было написать сеанс и не мог этого сделать.

Ответ 17

У меня была та же проблема, что запуск 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

Как только я исправил это, мой процесс начал работать нормально.

Ответ 18

Я получал то же сообщение об ошибке после перехода на новую тему в Wordpress. PHP работал под управлением версии 5.3, поэтому я перешел на 7.2. Это решило проблему.

Ответ 19

Запустите эту команду в корневой директории Magento php -d memory_limit=4G bin/magento

Ответ 20

Переключение сервера на php 7.x решило проблему в моем случае

Ответ 21

если вы используете 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 }