最近因项目需要,引出一个议题:如何执行字符串的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