AotD
@AotD
PHP, Redis, Postgresql

PHP скрипт — определение необходимых extensions

Задачка проста и банальна:
Новый сервер с чистой установкой php.
Скрипт активно пользующийся всякими вкусностями типа SOAP, json_encode и прочими благами цивилизации.
Необходимо поставить только нужные расширения.

Решение которое родилось у меня:
1) На сервере с полным фаршем расширений, где скрипт будет работать 100% составляем список доступных (get_loaded_extensions).
2) Составляем список функций и констант для каждого (get_extension_funcs, get_defined_constants)
3) Поиск этих функций и констант по проекту (find, grep и прочие извращения)
4) Имеем готовый список необходимых расширений.
Минус: расширения добавляющие только классы (xmlreader к примеру) не будут идентифицированы, т.к. классы не попадут в вывод get_extension_funcs

Есть ли готовое решение «ис каропки» для проведения аудита кода и составления списка необходимых расширений? Или как можно решить эту задачу другим способом?
  • Вопрос задан
  • 2559 просмотров
Решения вопроса 1
AotD
@AotD Автор вопроса
PHP, Redis, Postgresql
А вот и вариантец Статический анализ PHP-кода с помощью HipHop.
Т.к. идет попытка компиляции — все ветки просматриваются де-факто.
Схема: Выключаем всё, компилим, ловим ошибку, включаем нужное.
Минусы очевидны — собрать hiphop, настроить автоматизированную среду компиляции и включения/отключения модулей. Не факт что оно вообще будет компилить ваш проект.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Dzuba
@Dzuba
Об указанных Вами минусах: посмотрите в сторону get_declared_classes и get_class_methods.
Ответ написан
taliban
@taliban
php программист
Если поставите голый пхп, он сам скажет что ему надо.
Ответ написан
Zyava
@Zyava
Если у вас ООП приложение, то можно попробовать следующий способ:
0. Отключаем все расширения в пхп.ини.
1. Составляем список всех расширений пхп в виде массива, устанавливаем свой обработчик ошибок через ua.php.net/manual/en/function.set-error-handler.php.
2. Грузим все расширения в рантайме с помощью php.net/manual/en/function.dl.php
3. Загружаем все классы, все файлы какие можно.
4. Повторяем пункты 2-3, по очереди не загружая одно из расширений. Если вылетит эксепшн или ошибка — значит не загруженное расширение используется.

Покрытие конечно не 100% т.к. все файлы загрузить не получится (в тех же вьюхах, если их напрямую грузить, посыпятся ошибки).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы