PHP中有没有办法尝试包含一个文件,但是如果文件包含阻止它编译的错误,只是跳过包含该文件?
3 回答
4
您可以在有问题的文件上调用 php -l。不过,这将耗尽并减慢速度。它不处理像 die() 这样的运行时错误。
测试.php:
<?php
function check_code_file($filename)
{
$filename = escapeshellcmd($filename);
system("php -l $filename 2>/dev/null 1>/dev/null", $status);
if ($status) return false;
return true;
}
if (check_code_file('test-good.php'))
{
include('test-good.php');
}
if (check_code_file('test-bad.php'))
{
include('test-bad.php');
}
print "finished\n";
测试好.php:
<?php
print "here\n";
测试-bad.php:
<?php
die(
$ php 测试.php
here
finished
于 2010-06-06T00:15:49.510 回答
1
一个不太理想的解决方案,我想我会在这里提到后代。原来的想法在这里。
您可以捕获在错误的“要求”时收到的 E_PARSE 错误,并将其交给关闭函数。这个想法是为了抑制解析错误......
register_shutdown_function('post_plugin_include');
@require 'bad_include.php';
然后在事后执行您的主要执行。
function post_plugin_include() {
if(is_null($e = error_get_last()) === false) {
// do something else
}
}
就像我说的,虽然不太理想但很有趣。
于 2010-06-06T13:06:35.363 回答
0
根据 PHP 版本,您可以使用php_check_syntax()(实际上与 php -l 相同)。
但它确实是一个moo点..要么你需要你试图包括的东西,要么你不包括它。
于 2010-06-06T00:47:55.673 回答