Я вижу много php-библиотек, которые могут анализировать html. Хорошим примером является QueryPath, который имитирует JQuery Api.
Тем не менее, я ищу анализ phtml
. Таким образом, библиотека не только хорошо анализирует DOM, но также хорошо анализирует инструкции обработки php . например, объектная модель документа Php или PDOM .
Документ, подобный этому:
<?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?><html> <head> <title><?php echo $title ?></title> </head> <body> <h1>Hello <?php echo $name ?></h1> <p>Blah Blah Blah</p> </body>
Я хотел бы иметь возможность использовать эту библиотеку php для чтения таких вещей, как:
а также, возможно, предлагая такие вещи, как:
Я мог потратить некоторое время на то, чтобы собрать что-то вместе, заимствуя код из таких вещей, как phpdocumentor и Zend Framework Reflection , используя встроенный DOM Api, интроспекцию и манипуляцию строк и т. Д.
Но если есть какая-то библиотека * phtmlQuery, которая может делать такие вещи, тогда это будет удобно.
Чтобы получить инструкции по обработке (и другие узлы) из ваших файлов, вы можете использовать DOM и XPath :
$dom = new DOMDocument; $dom->loadHTMLFile('/path/to/your/file/or/url'); $xpath = new DOMXPath($dom); foreach ($xpath->query('//processing-instruction()') as $pi) { echo $dom->saveHTML($pi), PHP_EOL; }
Это приведет к выводу:
<?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?> <?php echo $title ?> <?php echo $name ?>
Это будет работать со сломанным HTML. Вы можете найти дополнительные библиотеки в
Как только вы получите инструкции по обработке, вы можете запустить их через собственный токенизатор или попробовать некоторые из них:
Те не магически не дают вам информацию, которую вы ищете из коробки, поэтому вам, скорее всего, придется написать несколько дополнительных строк по своему усмотрению.
есть синтаксический анализатор xml, включенный в ядро php, который мог бы это сделать, но вы могли бы использовать его только на действительных страницах xhtml, а не только обычном html или сломанном xhtml. вам придется настроить парсер для обработки инструкций по обработке, и это может стать очень сложным.
http://www.php.net/manual/en/book.xml.php
http://www.php.net/manual/en/function.xml-set-processing-instruction-handler.php
Вы можете использовать token_get_all PHP для tokenize PHP, чтобы затем вы могли выполнить результат и проверить вызовы функций и значения PHP.
Например:
<?php $src = <<<EOD <?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?><html> <head> <title><?php echo $title ?></title> </head> <body> <h1>Hello <?php echo $name ?></h1> <p>Blah Blah Blah</p> </body> EOD; $tokens = token_get_all($src); var_dump($tokens);
Вам все равно нужно написать немного кода, чтобы пройти по всем токенам, посмотреть, что они собой представляют, а затем получить значение на основе типа токена (имя функции, строковая буква, назначение переменной и т. Д.), Но это делает много работы для вы до разбора PHP.