>백엔드 개발 >PHP 튜토리얼 >快速掌握PHP检查语法错误技巧_PHP教程

快速掌握PHP检查语法错误技巧_PHP教程

WBOY
WBOY원래의
2016-07-15 13:34:151175검색

错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如:

$func = ‘eval’

$func()这样的调用就是无效的。它会提示没有eval函数,如果你自己定义这么一个函数也是有问题的。因为eval是一个关键字。
eval调用和include差不多,如果被包含文件中没有明确return就返回null。如果直接eval我们需要检查的文件会造成被检查的文件内代码被执行,这可不是我们想要的,我们只需要检查一下这个文件的语法是否正确。 我们可以在要检查的文件之前添加return 语句,让代码提前跳出,那么后面的代码就不会执行了。好的,就这么干。代码如下:

<ol class="dp-xml">
<li class="alt"><span class="tag"> ?PHP  </span></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>PHP<span> ";  </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>PHP<span>  </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中。下次再研究下他们是出于什么原因把这个函数去掉的。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446009.htmlTechArticle错误抑制符去掉错误信息,eval和echo一样并不是函数,不能使用变量函数的方法调用比如: $func = eval $func()这样的调用就是无效的。它会提...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.