这个问题在这里已经有了答案:




10年前关闭。






我正在制作一个使用 URL 查询来访问应用程序不同部分的 Web 应用程序。我正在寻找一种解决方案来使无效查询(如 index.php?page=dashboarrrd 显示错误 404 消息而不是 PHP 错误)。

经过一番搜索,我发现我可以使用以下内容来完成这项工作:

if(!@include($fileName)){
    @include("pageData/404.php");
}

这是有道理的,但我不知道为什么会这样。我的意思是,@ 之前的 include 到底是什么意思?我完全理解 include $filename; 但我需要对 @include ($fileName) 的解释

最佳答案

你真正需要的代码是

$fileName = "pagedata/".basename($_GET['page']).".php";

if(is_readable($fileName)) {
    include($fileName);
} else {
    include("pagedata/404.php");
}

而@在这里绝对没有任何关系

@ 是缺乏经验的最大错觉之一。
使用它的人确实期望 只有一种错误 ,而实际上可能还有更多。并且堵住所有可能的消息以仅抑制其中一个消息绝对就像把 child 和浴缸一起扔掉一样。

有一个基本问题使这种误解如此普遍:

大多数 PHP 用户无法区分错误控制的三个方面:
  • 错误处理
  • 错误报告
  • 用户通知。

  • 大多数时候为了 [3] 人们会弄乱 (1) 和 (2)。虽然它们每个都需要单独处理:
  • 您的程序不应故意引发错误。没有错误应该是程序逻辑的一部分。曾经引发的所有错误都应该只是意料之外的错误。
    如果您预计会出现一些错误,则必须处理它。不是用@ 堵嘴,而是优雅地处理。 is_readable() 在我的代码中正是为此。
  • 错误报告是针对程序员的,应该总是最大。因此,应该在事件站点上启用错误日志记录,程序员必须检查所有发生的错误。当然,他会对此类错误感兴趣,因此 @ 只会在这里造成伤害。
  • 用户级错误消息应该与系统错误消息不同。您的 404.php 就是这种用户友好行为的一个很好的例子。至于系统错误消息,用户应该根本看不到它们。只需关闭 display_errors 并查看 - 再次使用 @ 没有用!
  • 关于php - @include ("filename") 是什么意思?那和包含 "filename"有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5345805/

    10-13 23:05