我在PHP5中编写了一个需要某些文件代码的脚本。当A文件不可用时,首先会发出警告,然后抛出致命错误。当无法包含代码时,我想打印自己的错误消息。如果requeire不起作用,是否可以执行最后一个命令?以下不起作用:
require('fileERROR.php5') or die("Unable to load configuration file.");
使用error_reporting(0)
来抑制所有错误消息只会显示白屏,而不是使用error_reporting会产生PHP错误,我不想显示它。
答案 0 :(得分:15)
您可以将set_error_handler
与ErrorException
结合使用来完成此操作。
ErrorException
页面中的示例是:
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
/* Trigger exception */
strpos();
?>
如果您将错误作为例外处理,您可以执行以下操作:
<?php
try {
include 'fileERROR.php5';
} catch (ErrorException $ex) {
echo "Unable to load configuration file.";
// you can exit or die here if you prefer - also you can log your error,
// or any other steps you wish to take
}
?>
答案 1 :(得分:15)
我只使用'file_exists()':
if (file_exists("must_have.php")) {
require "must_have.php";
}
else {
echo "Please try back in five minutes...\n";
}
答案 2 :(得分:5)
更好的方法是首先在路径上使用realpath。如果文件不存在,realpath
将返回false
。
$filename = realpath(getcwd() . "/fileERROR.php5");
$filename && return require($filename);
trigger_error("Could not find file {$filename}", E_USER_ERROR);
您甚至可以在应用程序namespace中创建自己的require函数来包装PHP的require函数
namespace app;
function require_safe($filename) {
$path = realpath(getcwd() . $filename);
$path && return require($path);
trigger_error("Could not find file {$path}", E_USER_ERROR);
}
现在您可以在文件中的任何位置使用它
namespace app;
require_safe("fileERROR.php5");
答案 3 :(得分:1)
我建议您查看recent comment函数文档中set_error_handler()的最多{。}}。
它建议以下作为捕获致命错误的方法(并举例说明):
<?php
function shutdown()
{
$a=error_get_last();
if($a==null)
echo "No errors";
else
print_r($a);
}
register_shutdown_function('shutdown');
ini_set('max_execution_time',1 );
sleep(3);
?>
我没有尝试过这个建议,但是这可能适用于其他致命的错误情况。
答案 4 :(得分:1)
您需要使用include()。 Require(),当在不存在的文件上使用时,会产生致命错误并退出脚本,因此你的die()不会发生。 Include()仅抛出警告,然后脚本继续。
答案 5 :(得分:0)
我使用的一种简单方法是
<?php
...
if(!include 'config.php'){
die("File not found handler. >_<");
}
...
?>