2012-09-06 106 views
0

假設我們有一個template.php文件與一羣HTML和位的PHP代碼的純文本,例如:輸出中的PHP代碼從文件

... 
<body> 
    <div class="content"> 
     <?php echo $content; ?> 
    </div> 
</body> 
... 

我想讀取文件爲文本的內容(包括php代碼)並輸出到textarea中以供用戶編輯模板。 我試圖做到這一點使用file_get_contents,並使用htmlspecialchars呈現它,但它似乎在從文件中讀取它來執行的PHP代碼。如何避免在這種情況下解釋和執行php代碼?谷歌搜索沒有幫助,也許我沒有努力。有小費嗎?謝謝!

編輯: 好吧,我解決了這個問題。問題是我將URL路徑傳遞給文件到file_get_contents而不是其文件系統路徑,顯然這導致所有的PHP代碼被剝離和忽略(?)。謝謝你的提示,雖然

+4

'file_get_contents'不會執行的代碼,你能告訴我們你的做法? –

+0

你可以顯示你的代碼來生成'$ content' –

+0

你能告訴我們代碼輸出的代碼嗎? –

回答

1

file_get_contents不會執行PHP代碼,除非你試圖編輯遠程服務器上的文件,提供的URL。在這種情況下,您從遠程服務器獲得的將是執行的PHP代碼,而不是源代碼。

無論是編輯本地文件,或者你需要提供一個「後門」,將送你回一個給定的PHP文件的代碼。要小心,因爲這是一個安全漏洞 - 任何人都可能閱讀你的PHP的源代碼。

避免這種情況的方法是隻接受,如果他們是在給定的目錄中提供的文件。 另一種可能是檢查文件內容:

<?php 

    // This file will read any local PHP file (or any file of any kind, 
    // returning it as text), provided they contain a written agreement 
    // to be read. 
    if (!isset($_REQUEST['file'])) 
     die("ERROR: no file supplied"); 
    $path = $_REQUEST['file']; 
    if (!is_readable($path)) 
     die("ERROR: file is not readable"); 
    $content = file_get_contents($path); 
    if (false === strpos($content, "IT IS OK TO READ THIS FILE AS SOURCE")) 
     die("ERROR: this file is not authorized"); 
    if (false !== strpos($content, "IT IS NOT OK TO READ THIS FILE AS SOURCE")) 
     die("ERROR: this file is not authorized"); 
    Header("Content-Type: text/plain"); 
    Header("Content-Length: " . strlen($content)); 
    die($content); 
?> 

爲了能夠讀取該文件,該文件本身必須包含一個聲明,如

// IT IS OK TO READ THIS FILE AS SOURCE 

而且還必須包含的聲明相反的意思。