2011-11-27 62 views
0

我的php腳本需要從另一個文件加載內容,然後替換某些命令。使用以下代碼在靜態頁面上工作:運行php腳本並將數據作爲字符串返回

$pageName = 'pages/' . $_REQUEST['url'] . '.php'; 

$pageContents = file_get_contents($pageName); 

$IDCODE = $_SESSION['IDCODE']; 

$sql = "SELECT * FROM members WHERE IDCODE = '$IDCODE'"; 
$qry = mysql_query($sql); 

$OK = $qry ? true : false; 

$arr = mysql_fetch_array($qry); 

foreach ($arr AS $key => $val) { 
$pageContents = str_replace('{' . $key . '}', $val, $pageContents); 
} 

但是,如果要處理的文件是動態的呢? IE它從mysql數據庫中填充一些文本。

是否file_get_contents運行該文件或只是讀取它作爲一個字符串?

+2

它不會運行它作爲PHP,除非你用完整的URL調用它(即'file_get_contents('http://yoursite.com/pages/'。$ _REQUEST [ 'url']。'.php');'雖然這可能會帶來一些安全隱患,除非$ _REQUEST ['url']被消毒和驗證。「 – drew010

回答

0

如果通過網絡服務器運行指向文件的鏈接,它將被處理。如果你直接鏈接它,你會得到文件的確切內容。

0

相當凌亂的代碼。

$ pageName ='pages /'。 $ _REQUEST ['url']。 '.PHP';

$ pageContents = file_get_contents($ pageName);

此處爲本地文件包含漏洞。

$ OK = $ qry?真假;

爲什麼?無論你使用$ OK的值,你可以同樣使用$ qry。並且您從不再在所示的代碼中使用$ OK。

沒有錯誤檢查,代碼中沒有註釋。

如果要處理的文件是動態的,該怎麼辦?

WTF?你的意思是你想重新處理輸出爲PHP?然後你可以'評估($ pageContents);'但要小心代碼注入漏洞。

或者你想將腳本應用到PHP scrpt的輸出?然後,只需將URL作爲參數傳遞給file_get_contents(),例如

file_get_contents('http://localhost/path/' 
     . basename($_REQUEST['url'] . '.php'); 

但真的調用應該比這更好的控制。兩者都是凌亂的解決方案 - 模板解決方案應該就是這樣。去看看(例如)smarty

+0

我之前用過smarty,後來我做了$ OK,但我只是我沒有其他的錯誤檢查影響$ OK。我嘗試使用require($ pageName),它工作正常。 – swg1cor14

相關問題