2009-11-17 4 views
3

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

Я попытался следующие:

  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 через Simple HTML DOM, и именно в синтаксическом анализе я испытываю проблемы с памятью. В попытке уменьшить объем памяти сценария, я попытался использовать DOMDocument вместо этого. Это тоже не помогает. Фактически, ошибка с памятью теперь запускается в другом месте сценария.

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

спасибо.

+0

Хорошо, это значительно сложнее, но вам нужно будет проверить свой код для бесконечных циклов. Я рекомендую debug-and-conquer debug для этого. Позвольте мне привести вам пример кода, который выдает ошибку «Недостаточно памяти»: 'function returnSomething ($ what) {return returnSomething ($ what); } returnSomething (true); 'dump 'Fatal error: Разрешенный размер памяти из 134217728 байт исчерпан (пытался выделить 261900 байт) в ...' – Dereleased

+0

Нет кубиков. Мои администраторы учетной записи хостинга смогли запустить мой скрипт без каких-либо проблем в качестве пользователя root. Кроме того, мой сценарий работает отлично на моей локальной машине. – jkndrkn

ответ

7

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

3

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

+1

+1: По моему опыту, это обычно проблема. – Powerlord

+0

Спасибо, но я уже пробовал это. – jkndrkn