福哥在利用PHP开拓一个许可用户输入伪代码实现自定义业务逻辑的功能时候,想到了利用PHP的eval功能动态解析PHP代码并且实行来实现。

不过,福哥创造了一个问题。
大家都知道PHP的语法缺点是在解析PHP代码的环节就会触发的严重缺点,这个缺点无法通过set_error_handler钩住它进行自定义处理,这个可能难坏了我了!
毕竟,用户输入的伪代码可保不齐会有低级的语法缺点啊~~

2. 办理

经由一番研究后创造,原来eval可以通过try .. catch来捕获它的缺点。

php解密evalPHP捕捉eval傍边的语法毛病和体系毛病的办法 Docker

2.1 全部缺点

须要把稳的是eval必须用Error非常才可以捕获缺点,包括语法缺点或者实行缺点都可以捕获到。

2.2 语法缺点和实行缺点

如果须要单独判断语法缺点的话,可以换成ParseError非常。
然后下面再补一个Error非常捕获实行缺点。

2.3 完全示例

下面福哥给一个完全的示例代码。

2.3.1 语法缺点

try{//福哥写了一个没有关闭括号的函数调用,这里属于语法缺点了eval('call_tongfu_net(');}catch(ParseError$e){print("语法缺点:".$e->getMessage());}catch(Error$e){print("实行缺点:".$e->getMessage());}

2.3.2 实行缺点

try{//福哥写了一个不存在的函数调用,肯定会报实行缺点的eval('call_tongfu_net();');}catch(ParseError$e){print("语法缺点:".$e->getMessage());}catch(Error$e){print("实行缺点:".$e->getMessage());}

https://tongfu.net/home/35/blog/513659.html