@snovazabilparol
PHP是世界上最好的编程语言!当之无愧!

Как оптимизировать скрипт?

Есть скрипт, который работает в фоновом режиме. Работает "бесконечно" долго, остановиться должен лишь когда сам того пожелает, то бишь при выполнении условия N.
Общая суть такова:
1. Обращаемся через Curl к ПУ сервиса N, который не имеет никакого API.
2. Берем данные, с помощью PHPQuery вытаскиваем что нужно в массив.
3. Проводим проверки на соответствие и на ошибки.
4. Пишем данные в файл в текстовом формате с помощью file_put_contents.
5. Проверяем достижение условия N.
5. Повторяем операцию снова и снова и снова...

Вопрос состоит в следующем. Скрипт вылетел через какое-то время с ошибкой Fatal error: Out of memory.
Прописал в начало скрипта:
ini_set('xdebug.remote_autostart', 0);
ini_set('max_execution_time', 0);

Не помогло, хотя от предыдущей ошибки max_execution_time избавился, XDebug как оказалось, не выключился, как ожидалось и все это время ужасно тормозил и без того медленный скрипт.
Можно конечно выставить: ini_set('memory_limit', -1); но это не решение проблемы.
Где-то происходит утечка памяти, может нужно очищать переменные и цикл после итерации, может нужно вместо file_put_contents использовать fopen?
Может вы знаете что-то еще, что может влиять на память, буду рад услышать любой совет.
  • Вопрос задан
  • 669 просмотров
Пригласить эксперта
Ответы на вопрос 2
search
@search
мама говорит что я особенный
Должен вас огорчить, но фраза "пхп создан для того чтобы умирать" относится как раз к вашей проблеме. В ядре самого языка не предусмотрен сценарий "вечной" работы скрипта. Память расходуется неэффективно и Fatal error: Out of memory - это то что ждёт ваш скрипт при любом раскладе.

Самое простое решения в вашем случае: дёргать ваш проверочный скрипт кроном (cron). Скажем, каждую минуту, давать ему отработать и умереть. И так каждую минуту.
Ответ написан
у пхп есть понятие утечки памяти? да она может чем-то забиваться (уже ненужным) по мере работы скрипта, но в конечно итоге все сводится к смерти процесса и произойти это должно как можно скорее.
для твоей задачи можно взять nodejs + 2 библиотеки + 40 строк своего кода
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы