PHP - вывод содержимого из файла после манипуляций - PullRequest
1 голос
/ 23 апреля 2010

Я изо всех сил пытаюсь прочитать php-файл внутри php и выполнить некоторые манипуляции .. после этого содержимое в виде строки, но когда я пытаюсь вывести это с помощью echo или print, все теги php буквально включаются в файл.

так вот мой код:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   $file = file_get_contents($path);
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

и это вернет строку типа

<div id="content>
   <h2>Here is my title</h2>
   <p><? echo "my body text"; ?></p>
</div>

, но при этом будет напечатано именно то содержимое, которое не указано выше, без компиляции php.

Итак, как я могу отобразить этот "compilePage", убедившись, что он возвращает скомпилированный результат php, а не просто текст?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 23 апреля 2010
function compilePage($page, $path) {
    $contents = getMenuFor($page);
    ob_start();
    include $path;
    $contents .= "\n".ob_get_clean();
    return $contents;
}

Для оценки PHP-кода в строке вы используете функцию eval , но это чрезвычайно без внимания. Если у вас есть файл, содержащий код PHP, вы можете оценить его с помощью include , include_once , require или require_once в зависимости от ваших потребностей , Для захвата вывода включенного файла - или необходимого, или любого другого метода - вам нужно включить буферизацию вывода .

1 голос
/ 23 апреля 2010

Для этого вы можете использовать выходную буферизацию и include файл обычно:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   ob_start();
   include $path;
   $file = ob_get_contents();
   ob_end_clean();
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

Вызов include() будет включать файл PHP в обычном режиме, и блоки <?php будут проанализированы и выполнены. Любой вывод будет захвачен буфером, созданным с помощью ob_start () , и вы можете получить его позже с другими функциями ob_*.

0 голосов
/ 23 апреля 2010

Вам нужно использовать include (), чтобы он выполнялся. Вы можете связать это с буферизацией вывода , чтобы получить возвращение в строке.

функция compilePage ($ page, $ path) { $ contents = array (); $ menu = getMenuFor ($ page);

//output buffer
ob_start();
include($path);
$file = ob_get_contents();
ob_end_clean();   

array_push($contents,$menu);
array_push($contents,$file);
return implode("\n",$contents);

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...