Я хочу создать расширение PHP, которое может динамически проверять каждый код операции, сгенерированный из файла PHP, и выполнить некоторую проверку по этому поводу.
Я наткнулся на несколько веб-сайтов и обнаружил несколько функций, таких как zend_set_user_opcode_handler
, но я не понимаю, как эта функция может быть использована для получения полного кода операции, как ASSIGN !0, 50
,
Я знаю о команде, как php -d vld.active=1 -d vld.execute=0 -f [filename].php
который я могу использовать для генерации кодов операций PHP, но насколько я знаю, вы можете получить доступ к кодам операций только после завершения программы PHP.
То, что я хотел бы получить от расширения, это код операции, который получается один за другим (динамически) по мере выполнения функции.
Может кто-нибудь помочь мне с этим вопросом?
Вы могли бы использовать parsekit
который доступен через PECL который можно скачать с веб-сайт pecl или установлен с:
sudo pecl install parsekit
Вы могли бы использовать parsekit_compile_string
Синтаксис этой команды:
array parsekit_compile_string ( string $phpcode [, array &$errors [, int $options = PARSEKIT_QUIET ]] )
Параметры:
phpcode
Строка, содержащая phpcode. Аналогично аргументу для eval ().
ошибки
2D-хэш ошибок (включая фатальные ошибки), обнаруженных во время компиляции. Возвращено по ссылке.
опции
Один из PARSEKIT_QUIET или PARSEKIT_SIMPLE. Для получения различной степени детализации в возвращаемом выводе.
Возвращаемые значения
Возвращает сложную структуру многослойного массива, как описано ниже.
Пример использования этого:
<?php
$ops = parsekit_compile_string('
echo "Foo\n";
', $errors, PARSEKIT_QUIET);
var_dump($ops);
?>
Вывод слишком длинный для включения в этот ответ, но доступен на страница документации
Вы могли бы использовать parsekit_compile_file
Очень похоже на описанный выше подход, но анализирует файл вместо строки.
Других решений пока нет …