<u></u>eval
函数会把字符串按照php代码来执行。
如果字符串是合法的php脚本,
则eval
会返回字符串中return
的值,
如果字符串中没有return
,则返回null
。
如果字符串中的php脚本语法错误,
则会产生Parse error
错误,
<u></u>eval
会返回false
。
通过eval
与错误抑制符@
联合使用,可以判断给定php脚本是否具有语法错误。
注意:
<u></u>php_check_syntax
也是用来判断语法错误的,只不过被废弃了。
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
中开头和结尾的html不被解析为php。但是,这种用法在php5.3.26中不能解析,必须把<?php
和?>
去掉才可以。
(3)@eval
会求值参数字符串,并抑制错误信息。
(4)虽然eval
执行的字符串首先return true;
了,但是其中的function还是会被加载到全局空间中的。而且,eval
无法定位到语法出错的位置,所以,后来改用了register_shutdown_function
。