7

PHP中有没有办法尝试包含一个文件,但是如果文件包含阻止它编译的错误,只是跳过包含该文件?

4

3 回答 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 回答