今天在调试网站的时候,发现用户找回密码的功能,不能正常的发送新密码到用户的注册邮箱。
但是,相同的代码在本地调试环境中就是正常的,在远程服务器上就是不行。
最后定位出来的问题是:
空间服务商,在php.ini中默认把PHP函数fsockopen给禁用了,启动之后,就可以正常运行发送邮件的功能。
我用的是email.class.php类文件。
function smtp_sockopen_relay()
{
<span style="white-space:pre"> </span>$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");
<span style="white-space:pre"> </span>$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
<span style="white-space:pre"> </span>if (!($this->sock && $this->smtp_ok())) {
<span style="white-space:pre"> </span>$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");
<span style="white-space:pre"> </span>$this->log_write("Error: ".$errstr." (".$errno.")\n");
<span style="white-space:pre"> </span>return FALSE;
}
可以定位到这段代码中需要fsockopen函数,但是缺加了@屏蔽其错误提示,所以导致没有看到明显的错误提示。
问题解决的一些感悟,需要看看调用的其他类中是否用到了某些系统函数,但是却被空间商默认给关闭的?