2012-02-04 67 views
1

当我在我的测试服务器上调用PHP邮件功能时,我收到警告。这是正确的,因为当商场出现故障时,我没有启用邮件服务器来测试系统。我希望这个函数不要抛出警告。我将如何实现这一目标?禁用PHP邮件功能的警告

虽然函数本身仍然应该失败。 (即返回false)

感谢迈克尔

+0

您是否试图检测邮件服务器是否可用?例如,可能在安装/环境脚本中? – 2012-02-04 08:04:13

+0

感谢您的回复。在我的情况下,我正在运行一个Ajax PHP脚本,其中包括发送邮件。我不能让PHP文件的输出包含警告,因为邮件不是那么重要,如果它失败了,就会被记录下来。我以前听说过抑制运算符,我会试图不使用它,但在这种情况下,我认为这是一个很好的解决方案。 – 2012-02-04 08:17:09

回答

1
use @mail(parameters...) 

@supresses任何错误报告输出的邮件可能会产生

您也可以suprress警告一起

error_reporting(E_ALL ^E_WARNING) to supress warnings all together 
0

什么是错瓦特/ @?

@mail(// should suppress errors); 
+0

嗯,我想知道他是在说*输出还是错误日志。因为有些服务器(如我的)仍然会将错误写入Apache错误日志,即使它被执行脚本所抑制。 – animuson 2012-02-04 07:47:17

+0

这会更符合log_errors指令的行,然后,类似于第一个答案正在处理的内容。在每个功能的基础上进行交易会让人厌倦。 – quickshiftin 2012-02-04 07:49:29

+1

['@'抑制运算符](http://php.net/manual/en/language.operators.errorcontrol.php)IMO是[反模式](http://en.wikipedia.org/wiki/Error_hiding)方法太容易被滥用或滥用。在这个操作员的几乎所有使用案例中都存在更好的技术,我自己的方法是调查根本原因(或确定试图实现的目标)并找到一个省略它的更好方法。 – 2012-02-04 08:07:55

3

而不是试图压制有效的警告,为什么不跳过测试服务器上的邮件功能?

这样做

if($_SERVER[ 'SERVER_NAME' ] != 'my.testing.server'){ 
    mail(...); 
} 

或者,更好的是,设置一个全局变量,你可以测试,以确定您的服务器是在开发/测试/生产模式。然后,如果邮件方法不处于生产模式,则可以简单地跳过该方法。

您可以使用@禁止警告消息,但这会导致代码保留就位,可能会在代码部署到生产服务器时取消警告。

+0

这是最好的解决方案,因为它只会抑制开发环境中的警告 – andrewtweber 2012-02-04 08:13:28

+0

实际上,我的服务器具有邮件功能,但出于测试目的,我需要禁用它以测试邮件发生故障时系统的工作方式。 – 2012-02-04 08:21:29

+0

@Michael更好地禁用一个邮件功能比所有警告!我会强烈地考虑选择这个作为最佳答案,而不是你选择的那个。 – andrewtweber 2012-02-04 08:51:40