Вот единственное реальное решение, которое мне удалось найти:
function safe_include($fn) {
$fc = file_get_contents($fn);
if(!eval($fc)) {
return 0;
}
return 1;
}
Обратите внимание, что приведенный выше код означает, что вы должны извлечь вступительные заявления из файлов, которые вы хотите включить, или сделать следующее:
eval("?>" . $fc)
Проблема в том, что вы не можете вызывать require () или include () или их варианты _once () в любой момент и ожидать, что они не завершат все , включая любые обработчики ошибок. PHP полностью прекратит обработку всего, когда он обнаружит ошибку разбора.
Единственным исключением из этого является строка внутри eval (). Однако проблема в том, что вы не можете сделать это:
eval('require($fn);');
... потому что require () внутри строки eval'd будет все еще stop. Вы должны прочитать содержание, молиться о том, чтобы данный файл не включал () и не требовал () далее, и eval ().
Реальное решение? Пропустить PHP. : /