7

PHPでファイルをインクルードしようとする方法はありますが、ファイルにエラーが含まれている場合、コンパイルを停止してそのファイルをインクルードからスキップするだけですか?

4

3 に答える 3

4

問題のファイルでphp-lを呼び出すことができます。ただし、これはシェルアウトして遅くなります。ただし、die()のようなランタイムエラーは処理しません。

test.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";

test-good.php:

<?php
print "here\n";

test-bad.php:

<?php
die(

$ php test.php

here
finished
于 2010-06-06T00:15:49.510 に答える
1

後世のためにここで言及したいと思った理想的とは言えない解決策。元のアイデアはここにあります。

不適切な 'require' で受け取る 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と同じです)。

しかし、それは本当に重要なポイントです。あなたが含めようとしているものが必要であるか、それを含めないかのどちらかです。

于 2010-06-06T00:47:55.673 に答える