【问题标题】:What does the @ character do in PHP? [duplicate]PHP 中的@ 字符有什么作用? [复制]
【发布时间】:2011-05-26 11:58:37
【问题描述】:

可能的重复:
Reference - What does this symbol mean in PHP?
What does @ mean in PHP?

我的代码中有一行如下所示:

@mysql_select_db($dbname) or die("Error: Unable to select database");

它有效,但我想知道 @ 的作用以及它为什么存在。

【问题讨论】:

  • 在我最近看到的一个很好的引述中,“它会阻止你发现你的程序出了什么问题”。我认为是戈登……
  • @ElYobo 不认为是我,但其中有很多真相
  • @Gordon,那时你应该保持安静并承担责任;)它在 SO 上的某个地方,但我现在似乎找不到它。
  • "@Gordon,你应该保持安静..." 鉴于这个问题,我觉得这很有趣。
  • @Aether 呵呵,是的,但我默认启用了scream ;)

标签: php


【解决方案1】:

@ 符号会抑制其前面的表达式的任何错误和通知。

请参阅此参考:PHP Error Control Operators

PHP 支持一种错误控制 运算符:at 符号 (@)。什么时候 添加到 PHP 中的表达式之前,任何 可能产生的错误信息 通过该表达式将被忽略。

【讨论】:

    【解决方案2】:

    在这种情况下,@ 将抑制常规 PHP 数据库连接错误(可能包含敏感信息)。如果发生连接错误,将执行“或死”部分,失败并显示一般错误消息。该行可能是从“快速而肮脏”的示例中复制的。

    使用错误抑制运算符@ 被认为是不好的风格,尤其是在缺少其他形式的错误处理时。它使调试复杂化——你怎么能在没有任何迹象表明它发生的情况下发现错误?在生产系统中,最好将所有错误记录到文件中并禁止在页面上呈现错误。您可以在 php.ini 文件中执行此操作,或者(如果您在共享主机上并且不允许进行配置更改)使用以下代码。

    ini_set('display_errors', false);
    ini_set('log_errors', true);
    ini_set('error_log', '/var/log/apache/php-errors.log');
    

    【讨论】:

    • @ 将抑制每个错误,而不仅仅是数据库连接错误。
    • 谢谢,我已经编辑了我的答案以反映这一点。
    【解决方案3】:

    它抑制所有错误输出。一般来说,除非你有充分的理由,否则你不应该使用它。我不知道为什么在您发布的示例中使用它,或者为什么使用 die()。应捕获并相应地处理错误。选择可能由于多种原因而失败,其中一些可能是可以恢复的。就像没有建立到数据库的连接一样。

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2011-07-08
      • 2014-04-18
      • 2013-10-20
      • 2011-09-29
      • 2016-02-24
      • 2010-10-04
      • 2020-07-21
      相关资源
      最近更新 更多