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 中的@ 字符有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章