最近因项目需要,引出一个议题:如何执行字符串的php代码(php和html混写)。
注:传统情况下,php代码存储在文件中,直接运行文件即可。以下讨论的情况是,如果php代码是从数据库中获取到,那么要如何运行?

最直观的方案

  • 将字符串代码写到临时文件,然后在项目中include该文件,执行完成再删除这个临时文件

  • system exec 之类的系统函数

  • php函数eval (会不会有安全问题?)

进一步的瞎想

  • 把字符串代码当做参数,传入到php的cli或者php-fpm中运行

  • 重新定义include,让include可以直接操作字符串

几种思路的验证

  • 1:写临时文件,然后include文件。豪无疑问,可行。那么岂不是每次都要写文件,每个请求都要写一次文件。好吧,总有办法解决,缓存+过期验证之类的,但总感觉这方案不够专业。。

  • 2:system exec之类的函数。稍微思考下就会明白,这类函数是执行系统命令,不是运行php代码

  • 3:eval函数,手册上写着:

    Caution :The eval() language construct is very dangerous because it allows execution of arbitrary PHP code

    网友评论