2010-04-22 3 views
1

Я изо всех сил пытаюсь прочитать php-файл внутри php и делать некоторые манипуляции .. после этого есть содержимое как строка, но когда я пытаюсь вывести его с помощью эха или печати все теги php буквально включены в файл.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, а не просто обычный текст?

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

+0

php.net/variables.scope скажет вам, что переменные, определенные вне функции, недоступны внутри функции. Чтобы получить доступ к этим переменным, вам нужно будет использовать инструкцию 'global'. Вероятно, вы захотите рассмотреть это решение для шаблонов: http://codeangel.org/articles/simple-php-template-engine.html – erisco

ответ

1
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 в зависимости от ваших потребностей. Чтобы захватить вывод включенного файла - или требуется, или какой бы способ - вам нужно включить output buffering.

+0

спасибо erisco, я не уверен в других решениях, но это оказалось самым простым. :) приветствие – zanona

1

Вы можете использовать output buffering для этого, и 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

+1 это лучший способ. –

0

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

function 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); 

}

Смежные вопросы