之前使用的是万网M2-S空间,200M网页空间,20M数据库空间,20G月流量,还配备独立IP地址(万网被阿里巴巴收购之后好像取消了独立IP,对于旧产品的独立IP是否保留尚不清楚) 在代理商那边购买的价格约在100出头一年。
自从万网被阿里巴巴收购并入到阿里云旗下,其产品价格也是大幅下降,除了域名降到了平民价格并且开放了自由转出,虚拟主机也是推出了廉价的X3跟X5型号,于是M2-S到期之后我就直接选择了X3,省去了要找代理商续费的麻烦。X3主机是150M网页空间,20M数据库空间,8G月流量,对于我这样的小博客来说是足够了!(空间目前只用了60M,数据库目前只用了6M不到,流量的话2014全年每月都在3G以下,因为我只放了基本数据,图片啥的都放在另外的VPS上面)
博客转移到X3之后,发现一个问题:博客的自动备份功能没用了! (安装了 WordPress Database Backup 插件,每天会自动备份两次数据库并发到我的电子邮箱)
既然邮箱没收到备份文件,于是到wordpress后台手动备份一次看看,发现备份过程是很顺利的,但是最后一步发送邮件的时候提示:exec() has been disabled for security reasons
怀疑是exec函数问题,于是通过探针检查了被禁函数,发现确实包含exec,于是联系万网客服,我说我的X3主机无法在线发信,可能是exec函数被禁问题,之前是用的M2-S,则是可以发信的,结果客服告诉我exec函数是禁用的,包括M2-S
于是我在M2-S上传了探针,然后把被禁函数复制到Notepad++ 用 compare 对比X3的被禁函数,发现两者的被禁函数是完全一致的(只是顺序有略微差异) 然后使用探针上面的发信功能测试了下,发现X3的不可以发,M2-S的可以发。
尝试通过安装第三方smtp插件解决问题,结果提示:stream_socket_client() has been disabled for security reasons 看样子应该是 stream_socket_client 函数被禁的问题了!
继续联系客服询问在线发信的问题,客服告知说X3主机需要您使用fsockopen函数进行发信,代码可参考:
http://help.www.net.cn/knowledge_detail.htm?knowledgeId=5868351
通过测试,我终于明白了:
1、X3是使用的精简版的系统,没有sendmail组件,所以无法直接发信。
2、使用第三方smtp发信失败,是因为X3禁用了 stream_socket_client 函数。
既然客服说是支持 fsockopen 函数发信的,所以解决方案如下:
1、到云主机后台php.ini设置启用 fsockopen 函数 (默认是禁用的)
2、对 wp-includes/class-smtp.php 文件做如下修改:
找到如下代码:
$this->smtp_conn = @stream_socket_client( $host . ":" . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context );
将其替换为:
$this->smtp_conn = fsockopen($host, $port, $errno, $errstr);
然后第三方smtp插件就可以用了,我使用的是 Configure SMTP,配置如下:
以前的发信如下: (注意发件人,是主机代发的,可能会被某些邮箱当成垃圾邮件 )
现在的发信如下:(注意发件人,属于smtp服务器认证的)
昨晚设置好的,今天检查备份邮箱,发现早上自动备份的邮件也恢复正常了:
请注意:现在wordpress可能会强制更新的,可以登陆后查询更新页面是否有“您使用的WordPress是最新版本。 将来的安全更新将被自动安装” 这段话,如果有,需要修改 wp-config.php 添加如下语句来关闭自动更新:
define( ‘WP_AUTO_UPDATE_CORE’, false );
如果不关闭自动更新,更新后 wp-includes/class-smtp.php 会被覆盖成原始版本的! 所以最好是手动更新,更新后立即修改 wp-includes/class-smtp.php,避免在自己不知情的情况下被自动更新导致发信功能故障!