[PHP] php中的eval函数

<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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PHP代码执行函数 eval & assert & preg_replace eval 函数 php官方手册:ht...
    xaviershun阅读 10,521评论 1 12
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,461评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,477评论 19 139
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 5,617评论 0 6
  • iOS 友盟第三方登录分享
    Hollylord阅读 5,307评论 0 13