错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:
$func = ‘eval’
$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。代码如下:
<ol class="dp-xml"><li class="alt"><span class="tag"><</span> ?PHP </li><li><span>if(!function_exists('</span>PHP<span>_check_syntax')) { </span></li><li class="alt"><span>function </span>PHP<span>_check_syntax($file_name, <br />&$</span><span class="attribute">error_message</span><span> = </span><span class="attribute-value">null</span><span>) { </span></li><li><span>$</span><span class="attribute">file_content</span><span> = </span><span class="attribute-value">file_get_contents</span><span>($file_name); </span></li><li class="alt"><span>$</span><span class="attribute">check_code</span><span> = </span><span class="attribute-value">"return true; ?>"</span><span>; </span></li><li><span>$</span><span class="attribute">file_content</span><span> = $check_code . <br />$file_content . "</span><span class="tag"><</span><span> ?</span>PHP<span> "; </span></li><li class="alt"><span>if(!@eval($file_content)) { </span></li><li><span>$</span><span class="attribute">error_message</span><span> = </span><span class="attribute-value">"file: "</span><span> . <br />realpath($file_name) . " have syntax error"; </span></li><li class="alt"><span>return false; </span></li><li><span>} </span></li><li class="alt"><span>return true; </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>if(!</span>PHP<span>_check_syntax("file.</span>PHP<span>", $msg)) { </span></li><li class="alt"><span>echo $msg; </span></li><li><span>} </span></li><li class="alt"><span>else { </span></li><li><span>echo "Woohoo, OK!"; </span></li><li class="alt"><span>} </span></li><li><span class="tag"><</span><span> ?</span>PHP<span> </span></li><li class="alt"><span>foreach:: </span><span class="attribute">a</span><span> =</span><span class="tag">></span><span> b </span></li><li><span class="tag">?></span><span> </span></li></ol>因为Parse error 是没法被 set_error_handler处理函数处理的。这个异常没办法catch到。所以才使用了@来抑制错误。这带来的问题就是我们无法得到详细的错误信息。 不过目前我需要的功能也只是检查语法是否正确。不正确的话重新编译模板文件,就这么简单,至于语法错误,在显示网页的时候自然会看得到。
PHP检查语法错误最好的办法就是这个被遗弃的PHP_check_syntax这个方法回到PHP中。下次再研究下他们是出于什么原因把这个函数去掉的。
立即学习“PHP免费学习笔记(深入)”;
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号