Я создаю инструмент тестирования для выполнения в каталогах устаревшего PHP-кода, который чрезвычайно сложно выполнить модульный тест, хотя я использую PHPUnit для этого инструмента.
Одна из интересных вещей о PHPUnit заключается в том, что она превратит в уведомления PHP, предупреждения и ошибки в исключение. Используя этот бит знаний, я создал инструмент для рекурсивного include()
файлов из каталога в блок try / catch и регистрации любых исключений.
Проблема в том, что это может быстро стать памятью и сбоем памяти, если я включу сотни файлов. Я подумал об использовании этого, но я не уверен, что это «очищает» его от памяти:
// Include file into buffer ob_start(); include($file); // Clear file from buffer ob_clean();
Каков наилучший способ справиться с чем-то подобным образом и соответствующим образом управлять памятью / ресурсами?
[РЕДАКТИРОВАТЬ]
Кроме того, это внутренний инструмент, который я разрабатываю, чтобы помочь управлять тысячами файлов, содержащих непроверяемый (в смысле ограничения времени) устаревший процедурный код.
А как насчет мысли?
// Enable garbage collector (in case this helps?) gc_enable(); // Get procedural php and execute it $fileData = file_get_contents($file); eval($fileData); // Clear variable $fileData = null;
Что делать, если вы создаете отдельный CLI-скрипт («тестер»), который будет включать в себя один файл за раз и регистрирует исключения, а ваш основной скрипт («итератор») перебирает / рекурсирует в каталоги скриптов, которые вам нужно проверить и вызвать скрипт тестера через оболочку для каждого файла?