我知道通過使用eval($code_to_check);
我們可以檢查這個值是否等於FALSE
,如果是的話,我們可以停止執行腳本。然而,我面臨的問題是我無法定義一個函數,因爲它被調用兩次......它通過eval()檢查來處理,以確保沒有語法錯誤並且再次處理該函數,但顯示一個錯誤,指出它不能REDECLARE這個函數,因爲它已經在eval'd函數中聲明瞭。我怎樣才能使它不會在EVAL'd函數中聲明,或者我們可以在我們實際調用它之前聲明所有在eval()函數中聲明的東西...PHP - 檢查PHP代碼的語法錯誤而不運行代碼
反正,這是我目前的工作......可以使用一些幫助,因爲當$ content(這是php代碼)中有一個函數時,我得到了「無法重定向函數」。
// PHP Syntax errors?
if ([email protected]('return true;' . $content))
{
// Error found in PHP somewhere. Call error function and return out of here!
call_user_func_array($code_error['function'], $code_error['params']);
return;
}
else
{
ob_start();
eval($content);
$code = ob_get_contents();
ob_end_clean();
}
任何人都可以幫我嗎?謝謝你們,你們在這裏非常有幫助!您所應得的金牌,但我相信現在奧運會已經結束,這是不太運動尚未...
好吧,我在這裏嘗試我自己的答案,而這是否會仍然不知道捕獲錯誤並允許同時創建函數而不用兩次調用這些函數。這是一個正確的方法嗎?任何人都可以在此代碼中看到任何可能的問題如果沒有檢測到語法錯誤,我在迴應$ eval_code ...這樣做很好嗎?
$eval_code = @eval($content);
// PHP Syntax errors?
if ($eval_code === FALSE)
{
call_user_func_array($code_error['function'], $code_error['params']);
return;
}
else
{
ob_start();
echo $eval_code;
$code = ob_get_contents();
ob_end_clean();
}
您可以在「lint」模式下運行命令行'php'解釋器,以便在將片段存儲在臨時文件中後檢查語法。例如'exec(「php -l checkfile.php.txt」);'可以返回'沒有檢測到語法錯誤...' – mario 2012-08-14 01:32:46
不,我通過PHP輸入代碼到文本區域,並希望它影響頁面在我的網站上。有時,我創建了一個函數:'function doSomething($ blah)',但是這樣做會執行兩次......真的只需要在這裏運行eval ...也許如果我爲eval()設置了一個php變量,功能??? – 2012-08-14 01:33:32
'eval'不適用於代碼檢查。它馬上運行。那麼你可以跳過驗證步驟。無論如何,安全方面它是多餘的。儘管如此,如果你想在執行用戶提供的代碼之前聲明代碼的正確性,還是有用戶級的PHP解析器。 (後者是有問題的部分。) – mario 2012-08-14 01:40:17