2014-01-11 81 views
1

我有一個模板頁面,它是HTML和PHP的組合。我想輸出整個內容到另一個頁面,但我想在輸出之前先動態修改內容,包括代碼。將網頁讀取到一個字符串中,修改它,然後輸出它

如果我理解正確eval()需要去掉PHP字和開頭<?

到目前爲止,我有以下幾點:

$str = file_get_contents($template); 
    [Create an array of changes to make] 

    $str = str_replace($changes,"",$str); 

    $changes2 = array(); 
    $changes2[0] = '?php'; 
    $str = str_replace($changes2,"?",$str); 
    $str = substr($str,3); 
    eval("\$str = \"$str\";"); 
    echo $str; 

我原本只是在iframe打開的內容,但正如我所說,我需要先輸出前編輯文件中的代碼(和不修改原始模板代碼)。

我能想到的唯一方法是將模板讀入字符串,改變我需要的內容,將該字符串的內容寫入臨時文件,然後讀入臨時文件。

但是感覺這就是做這件事的冗長方法。

有沒有人知道這樣做的正確方法?

+3

爲了上帝的愛,不要使用'eval()'。如果'eval()'是答案,你問了一個錯誤的問題! ;) – BenM

+0

這很好。我不介意不使用它,我只是不知道除了創建臨時文件之外的其他方法。 – jimbeeer

+0

你需要做什麼改變?如果只是DOM操作,可以使用jQuery來完成嗎? – BenM

回答

0

使用output buffering

它可以讓你捕捉(緩衝)輸出,把它放到一個變量,又做你想做的,然後輸出。

如果PHP在處理完HTML後需要編輯HTML,那麼輸出緩衝就是要走的路。

最簡單的例子:

<?php 

ob_start(); 

echo "Hello World"; //Even though it was echoed, not getting displayed since buffered 

$out = ob_get_clean(); //Get buffer into variable, then delete it, without displaying. 
$out = strtolower($out); 

var_dump($out); //Now output the new value, will show "hello world". 

在你的情況,你最好include相關的文件(而不是file_get_contents()吧),捕獲輸出,改變更改,然後呼應的固定輸出。

+0

我需要更改php代碼而不是html – jimbeeer

+0

不會。您的方法看起來好像是錯誤的。動態地改變PHP代碼幾乎從來不是答案,並且這種感覺不像十萬分之一的情況。你介意分享你的目的嗎? –

+0

我已經在上面的答案的評論中說了什麼。它只是用於網站的管理端。 – jimbeeer

相關問題