尝试包含/需要 php 文件时如何打印自定义错误?
这是我的想法:
<?php
try{
include "template/".$_GET['view'].".php";
}
catch (Exception $e){
echo 'some error code';
};
?>
但是,如果所需的文件不存在,我仍然会收到默认错误。
用于file_exists()
在包含之前检查文件是否存在。这样你就可以处理错误。
<?php
if(file_exists('asd.php')){
include "asd.php";
}else{
echo "Oh no! The file doesn't exist!";
}
?>
包含错误不会被您的 try/catch 捕获,但是,我相信包含的脚本中的错误会被正确捕获。更好的解决方案是使用 file-exists 函数,请参阅这篇文章以获取示例:PHP 中的可选包含
一旦您对文件的存在进行了自己的验证,您就可以将执行代码包装在 try catch 中,以确保捕获该代码中的错误。
我不建议只使用file_exist
. 您不希望您的访问者访问您文件系统上的任何文件,因此我建议您使用白名单;如果文件名在白名单中,则仅显示/包含它。
if ((include "template/".$_GET['view'].".php") != 'OK') {
echo "My custom error message";
}
如果您想要自己的错误消息,您可以这样做:
<?php
$file = "template/".$_GET['view'].".php";
if ( error_reporting() == 0 ){
( @include_once($file) ) OR die("<tt><p><b>ERROR</b> $file file not found!</p>");
}else{
require_once($file);
}
?>
因此,如果没有错误报告(在生产环境中的大多数时间),您可以打印自己的错误消息。如果您处于开发模式(ans error_reporting 已打开),您会收到 PHP 错误消息!
提示永远不要使用来自用户的 $_GET 输入直接用于包含 - 这是一个黑色 XSS 漏洞 :-D