Скрипты командной строки PHP игнорируют директивы php.ini и ini_set('memory_limit',...)

StackOverflow https://stackoverflow.com/questions/1751719

Вопрос

Я сталкиваюсь с распространенной "Фатальной ошибкой:Не хватает памяти (выделено 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 без проблем, но столкнулся с той же проблемой, что и я, при запуске его с использованием моего пользователя, не являющегося root.Возможно, здесь какая-то проблема с разрешениями?

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

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

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

Спасибо.

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top