php - @include ("filename") 是什么意思?那和 include "filename"有什么区别?

标签 php

<分区>

Possible Duplicate:
Reference - What does this symbol mean in PHP?

我正在制作一个 Web 应用程序,它使用 URL 查询来访问应用程序的不同部分。我一直在寻找一种解决方案,使无效查询(如 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 用户无法区分错误控制的三个方面:

  1. 错误处理
  2. 错误报告
  3. 用户通知。

为了 [3] 的缘故,大部分时间人们都会混淆 (1) 和 (2)。虽然它们每个都需要单独处理:

  1. 您的程序不应出现故意错误。没有错误应该是程序逻辑的一部分。所有出现的错误都应该只是意外的错误。
    如果您预计会出现错误,则必须处理。不是用@堵嘴,而是优雅地处理。 is_readable() 在我的代码中正是为此。
  2. 错误报告是给程序员的,应该总是在最大值。因此,应该在实时站点上启用错误日志记录,并且程序员必须检查所有发生的错误。当然,他会对此类错误感兴趣,因此 @ 在这里只会造成伤害。
  3. 用户级别的错误消息应该与系统错误消息不同。您的 404.php 是这种用户友好行为的一个很好的例子。至于系统错误消息,用户根本不应该看到它们。只需关闭 display_errors 并查看 - @ 又没用了!

关于php - @include ("filename") 是什么意思?那和 include "filename"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345805/

相关文章:

php EMPTY 无法正常工作

java - 获取数据库中的表锁 - 面试问题

php - 如何将mysql改为mysqli?

PHP HTML DOM 解析器

php - 将 Laravel 版本从 7.x 更新到 8.0

php - Laravel 5.7 验证带星号的字段,required_if

php - Laravel 5 - 如何传递 html 数据以查看

php - Centos 7 上 PHP 客户端上的 Griddb 缺少文件

php - 使用函数连接到远程 mysql 服务器

php - 如何查看上传的文件类型是pdf