<u></u>eval函數(shù)會(huì)把字符串按照php代碼來執(zhí)行。
如果字符串是合法的php腳本,
則eval會(huì)返回字符串中return的值,
如果字符串中沒有return,則返回null。
如果字符串中的php腳本語法錯(cuò)誤,
則會(huì)產(chǎn)生Parse error錯(cuò)誤,
<u></u>eval會(huì)返回false。
通過eval與錯(cuò)誤抑制符@聯(lián)合使用,可以判斷給定php腳本是否具有語法錯(cuò)誤。
注意:
<u></u>php_check_syntax也是用來判斷語法錯(cuò)誤的,只不過被廢棄了。
function checkSyntax($fileRelativePath){
$fileContent=file_get_contents($fileRelativePath);
$isSyntaxOk=@eval(sprintf(
"return true;?>%s<?php",
$fileContent
));
return $isSyntaxOk;
}
注意:
(1)return true;是為了讓eval在腳本語法合法的情況下返回true
(2)?>和<?php是為了保證$fileContent中開頭和結(jié)尾的html不被解析為php。但是,這種用法在php5.3.26中不能解析,必須把<?php和?>去掉才可以。
(3)@eval會(huì)求值參數(shù)字符串,并抑制錯(cuò)誤信息。
(4)雖然eval執(zhí)行的字符串首先return true;了,但是其中的function還是會(huì)被加載到全局空間中的。而且,eval無法定位到語法出錯(cuò)的位置,所以,后來改用了register_shutdown_function。