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