1

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

这是我的想法:

<?php 

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

?>

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

4

6 回答 6

4

决定评论值得改变回答:

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

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

于 2012-04-21T18:59:10.470 回答
1

用于file_exists()在包含之前检查文件是否存在。这样你就可以处理错误。

<?php

if(file_exists('asd.php')){
    include "asd.php";
}else{
    echo "Oh no! The file doesn't exist!";
}

?>
于 2012-04-21T18:59:35.463 回答
1

包含错误不会被您的 try/catch 捕获,但是,我相信包含的脚本中的错误会被正确捕获。更好的解决方案是使用 file-exists 函数,请参阅这篇文章以获取示例:PHP 中的可选包含

一旦您对文件的存在进行了自己的验证,您就可以将执行代码包装在 try catch 中,以确保捕获该代码中的错误。

于 2012-04-21T19:00:49.113 回答
1

我不建议只使用file_exist. 您不希望您的访问者访问您文件系统上的任何文件,因此我建议您使用白名单;如果文件名在白名单中,则仅显示/包含它。

于 2012-04-21T19:01:50.397 回答
1
if ((include "template/".$_GET['view'].".php") != 'OK') {
    echo "My custom error message";
}
于 2012-04-21T19:02:05.967 回答
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);
}
?>

因此,如果没有错误报告(在生产环境中的大多数时间),您可以打印自己的错误消息。如果您处于开发模式(ans error_reporting 已打开),您会收到 PHP 错误消息!

提示永远不要使用来自用户的 $_GET 输入直接用于包含 - 这是一个黑色 XSS 漏洞 :-D

于 2016-03-17T14:39:12.687 回答