尝试包含/ require时出现自定义错误

时间:2012-04-21 18:56:49

标签: php include

如何在尝试包含/需要php文件时打印自定义错误?

这是我的想法:

<?php 

try{
    include "template/".$_GET['view'].".php"; 
}
catch (Exception $e){
    echo 'some error code'; 
};

?>

但是,如果不存在所需文件,我仍然会收到默认错误。

6 个答案:

答案 0 :(得分:4)

决定评论值得改变回答:

使用file_exists()查看文件是否存在。

如果是,请包含,否则回显您的自定义错误消息。

答案 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

相关问题