Как вы можете встроить PHP включает / требует или генерировать один PHP из нескольких? - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь проанализировать / реорганизовать / переписать сложный сайт PHP. Хотя я могу работать с отдельными файлами, я хотел бы объединить все в один файл, чтобы я мог выяснить контекст, не переключаясь между файлами.

Есть ли способ с помощью PHP (исполняемого файла) или других инструментов "встроенные" включения, возвращающие результат в виде одного файла PHP?

Я понимаю, что PHP не выполняет предварительную обработку включений, а вместо этого выполняет содержимое включаемых файлов по мере их поступления.

По сути, я ищу результат , как если бы предварительно обработанный PHP включает и требует перед выполнением.


Редактировать : Рабочее решение, основанное на предложении Дэна Гроссмана ниже. К сожалению, кодовая база, из которой я работаю, делает несколько хитрых трюков с include (), но это прекрасное начало.

<?php

function combinePhpFile($input) {

    $myFile = file_get_contents($input[2]);
    $myFile = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'combinePhpFile', $myFile);    
    return $myFile;

}
// preg_replace_callback wants an array? It GETS an array!
$result = combinePhpFile(array("dummy", "dummy", "index.php"));
file_put_contents("result.txt", $result);
?>

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Напишите свой собственный препроцессор, это не должно быть сложно.Это одна рекурсивная функция.Эта функция принимает файл .php в качестве аргумента, считывает файл в строку (file_get_contents), ищет любые операторы include / require и заменяет их содержимым файла (preg_replace_callback, где обратный вызов - это функция с именем включенного файла.в качестве аргумента), затем возвращает содержимое в виде строки.Рекурсивные вызовы будут разрешать входящие во включенные файлы и тому подобное, и в итоге вы получите одну строку, которую вы записываете в новый файл PHP (file_put_contents).

Нерекурсивный метод - это написать функцию, которая простоищет include / require, открывает включенный файл и заменяет include / require его содержимым.Вызывайте эту функцию в цикле на ее предыдущем выводе, пока выходные данные не будут одинаковыми на двух итерациях, и вы узнаете, что вы заменили все включения.

1 голос
/ 15 июля 2011

adminer имеет включенные класс / функции, и вы сможете читать файлы.Это называется "компилятор" там.Он берет все файлы с включениями и перемещает их в один файл .php

Это может вам помочь

...