[PHP] php中的eval函数

eval函数会把字符串按照php代码来执行。

如果字符串是合法的php脚本,
eval会返回字符串中return的值,
如果字符串中没有return,则返回null

如果字符串中的php脚本语法错误,
则会产生Parse error错误,
eval会返回false

通过eval与错误抑制符@联合使用,可以判断给定php脚本是否具有语法错误。

注意:
php_check_syntax也是用来判断语法错误的,只不过被废弃了。

function checkSyntax($fileRelativePath){        
    $fileContent=file_get_contents($fileRelativePath);
    
    $isSyntaxOk=@eval(sprintf(
        "return true;?>%s

注意:
(1)return true;是为了让eval在脚本语法合法的情况下返回true
(2)?>是为了保证$fileContent中开头和结尾的html不被解析为php。但是,这种用法在php5.3.26中不能解析,必须把?>去掉才可以。
(3)@eval会求值参数字符串,并抑制错误信息。
(4)虽然eval执行的字符串首先return true;了,但是其中的function还是会被加载到全局空间中的。而且,eval无法定位到语法出错的位置,所以,后来改用了register_shutdown_function

你可能感兴趣的:([PHP] php中的eval函数)