有没有办法使用eval()捕获致命错误?

时间:2015-01-25 20:47:07

标签: php

$code = 'php statement';

// getting perse error
function perse_error_check($code){
 if(eval($code) === "true"){
   return "no perse error"; 
 }

 if(eval($code) === "false"){
  return "perse error found"; 
 }
}


// getting fatal error
function fatal_error_check($code){
.......................................
.......................................
}

你能帮我完成第二个功能吗?其实我不确定天气是否可能。

2 个答案:

答案 0 :(得分:1)

以下将PHP代码写入另一个文件。 然后它使用命令行执行来解析文件并检查错误:

/* Put the code to be tested in a separate file: */
$code = '<?php echo "Test"; ?>';
file_put_contents('check.php', $code);

/* Parse that file and store the message from the PHP parser */
$x = exec( 'php -l check.php');

/* Check the message returned from the PHP parser */
if(preg_match('/Errors parsing/i',$x))
{
    echo 'The code has errors!';
}
else
{
    echo 'The code looks good!';
}

/* delete the file */
unlink('check.php');

好处是代码不会运行,只是被解析。但是我假设您会将该代码写入文件并使用它...所以像其他人一样,请非常小心。使用open_basedir(并测试它)来限制对特定目录的访问,在将代码包含在生产中之前手动检查代码......等等。

答案 1 :(得分:-1)

有一种简单的方法。将您的PHP代码放在另一个文件中。例如:index.php和check.php。将您的PHP代码放在check.php中。

现在在index.php中写道:

$check_data = file_get_contents("yourhosturl/allotherdirectory/check.php");

if(preg_match("/Fatal error/",$check_data)){
    echo "fatal error found"; 
}