我需要捕获函数“包括”PHP上的最后一个错误。
我用“异常”函数进行测试,但不幸的是,我在上面编写了“包括”函数。
如果我写后的函数“包括”不显示异常。
示例1:
try{
throw new exception();
require_once( $this->controller['path'] );
}
catch( exception $e )
{
print_r( error_get_last() );
}返回:.(无效)..。
示例2:
try{
require_once( $this->controller['path'] ) OR throw new exception();;
}
catch( exception $e )
{
print_r( error_get_last() );
}此返回:分析错误:语法错误,意外的T_THROW
我故意在文件中创建一个语法错误来包含。这样做的目的是捕获错误,以便您可以调试它们。
有人知道怎么弄到这个吗?
伙计们!我需要捕捉语法错误。欢迎光临!
发布于 2011-12-22 05:42:08
首先,如果您使用require,它总是会杀死您的应用程序,如果文件不能包括在内。结果是无法控制的,事后你什么也做不了。如果希望控制文件包含的成功,请使用include并测试其返回值。
$success = include "foo.php";
if (!$success) {
// the file could not be included, oh noes!
}您可以在这方面有语法上的差异,例如:
if (!(include "foo.php")) ...如果无法包含该文件,这将触发E_NOTICE,而您无法捕获该文件。但是这没关系,因为它将帮助您调试问题,而且在生产过程中显示错误也会被关闭(对吗?)
or throw new Exception无法工作,因为throw是一条语句,不能用于预期表达式的位置。
如果希望捕获包含的文件中的语法错误,请使用php_check_syntax/它的后续php -l <file>。
发布于 2011-12-22 04:59:43
require_once是一个语言结构,而不是一个函数,你不能用它做短路。
若要在包含该文件之前测试该文件是否存在,可以使用is_file()。如果要测试文件是否可读,可以使用is_readable()。
您还可能希望使用include,如果找不到文件,而不是E_COMPILE_ERROR,它会发出一个E_WARNING。
发布于 2011-12-22 05:11:00
我同意alex的观点,尝试用file_exists()检查错误,然后使用异常。
if(file_exists($this->controller['path'])){
try{
require_once( $this->controller['path'] );
}catch(Exception $e){
// throw error
}
}或者使用is_readable()
if(is_readable($this->controller['path'])){
try{
require_once( $this->controller['path'] );
}catch(Exception $e){
// throw error
}
} https://stackoverflow.com/questions/8599571
复制相似问题