PHP 中的@ 字符有啥作用? [复制]

Posted

技术标签:

【中文标题】PHP 中的@ 字符有啥作用? [复制]【英文标题】: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 ;) 【参考方案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()。应捕获并相应地处理错误。选择可能由于多种原因而失败,其中一些可能是可以恢复的。就像没有建立到数据库的连接一样。

【讨论】:

以上是关于PHP 中的@ 字符有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python中的“字符串”和“字符串”有啥区别吗? [复制]

PHP 中的“->”有啥作用? [复制]

% 对 Python 中的字符串有啥作用?

字符串流有啥意义? [复制]

格式字符串中的多个前导“#”符号有啥作用吗?

在 C# 中,“@”符号有啥作用? [复制]