Скрипты командной строки PHP игнорируют директивы php.ini и ini_set ('memory_limit', ...) - PullRequest
4 голосов
/ 17 ноября 2009

Я сталкиваюсь с общей ошибкой "Неустранимая ошибка: недостаточно памяти (выделено 30408704) (попытка выделить 24 байта) ..." Неустранимая ошибка PHP. Страницы, обслуживаемые через Apache, не демонстрируют такого поведения.

Я пробовал следующее:

  1. Увеличение значения memory_limit в php.ini до гораздо большего значения.
  2. Увеличение memory_limit внутри самого скрипта с помощью вызовов ini_set('memory_limit', -1), ini_set('memory_limit', '-1'), ini_set('memory_limit', 100000000), ini_set('memory_limit', '128M') и т. Д.
  3. unset() использование ненужных массивов и объектов, чтобы побудить сборщик мусора освободить память.
  4. Связь с веб-хостингом. Как правило, они очень способные и знающие, но не смогли мне помочь и в этом вопросе.
  5. Я пытался явно включить файл php.ini, используя флаг командной строки -c, чтобы вручную выбирать конкретные файлы php.ini с различными значениями.
  6. Я пытался установить memory_limit в php.ini, используя как необработанные числа байтов, так и такие значения, как 64M, 128M и т. Д.
  7. Хостинг-провайдер смог запустить скрипт без каких-либо проблем с правами суперпользователя, но у меня возникла та же проблема, что и при запуске его с использованием моего пользователя без полномочий root. Возможно, существует какая-то проблема с разрешениями?

Независимо от того, что я пытаюсь, сообщение об ошибке одно и то же. Похоже, что мои сценарии командной строки игнорируют изменения memory_limit.

Я стараюсь сделать так, чтобы мои скрипты работали с памятью, но в настоящее время мне нужно проанализировать большие объемы HTML с помощью Simple HTML DOM , и это в анализаторе, который я испытываю проблем с памятью. В попытке уменьшить объем памяти скрипта, я попытался использовать DOMDocument . Это тоже не помогает. Фактически ошибка нехватки памяти теперь вызывается в другом месте скрипта.

Мой вопрос: кто-нибудь сталкивался с такой или подобной проблемой? Есть ли у вас какие-либо рекомендации?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 19 ноября 2009

Оказывается, что проблема была вызвана включенной защитой от бомбы на сервере, на которой было установлено жесткое ограничение памяти для всех скриптов командной строки.Это было включено моим веб-хостингом без моего ведома.

3 голосов
/ 18 ноября 2009

ваш PHP на cli может использовать файл php.ini, отличный от вашего apache php. попробуйте phpinfo() и проверьте его, используя ini-файл, который, по вашему мнению, использует.

...