这个问题在这里已经有了答案:
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/