Существует ли путь в PHP, чтобы попытаться включать файл, но если файл содержит ошибки, которые мешают ему компилировать, чтобы просто пропустить тот файл от включения?
Вы можете вызвать 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
В зависимости от версии PHP вы можете использовать php_check_syntax () (практически то же самое, что и php -l).
Но на самом деле это мычание ... Либо вам нужно то, что вы пытаетесь включить, либо вы его не включаете.
Неидеальное решение, которое я хотел бы упомянуть здесь для потомков. Первоначальная идея здесь .
Вы можете зафиксировать ошибку 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
}
}
Как я уже сказал, далеко не идеально, но тем не менее интересно.