欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

阿里云主机 虚拟主机对YII2 laravel 的支持以及利用Swift_SmtpTransport组件发送邮件 Whoops, looks like something went wrong. 1/1 ErrorException in StreamBuffer.php line 283: stream_set_blocking() expects parameter 1 to be resource, null given 有大用 有大大用

Whoops, looks like something went wrong.

1/1ErrorException in StreamBuffer.php line 283:stream_set_blocking() expects parameter 1 to be resource, null given


1、新购的阿里云主机PHP版本默认是5.2,我们先更改为5.4或5.5版本,如下图:


2、因php5.4和5.5版本要求mysql数据库密码为41位加密,所以要重置一下数据库密码,如下图:

点击“重置密码”,弹出以下对话框:


3、访问网站报错,需要开启PHP函数chmod。如果需要SMTP发邮件,还需要开启fsockopen函数,如下图:

解决方法:设置PHP.ini,如下图:


4、Swift_SmtpTransport组件发送邮件时错“getmypid() has been disabled for security reasons”,如下图:

解决办法:在/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php这里文件将getmypid()(一共3个)全部替换为mt_rand(0, 32000),例如:

1
$this->_cacheKey = md5(uniqid(getmypid().mt_rand(), true));

改为:

1
$this->_cacheKey = md5(uniqid(mt_rand(0, 32000).mt_rand(), true));


5、SMTP发邮件还是有问题,如下图:

解决方法:打开/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php这个文件,大概263行-264行。

1
2
//$this->_stream = @pfsockopen($host, $this->_params['port'], $errno, $errstr, $timeout);
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno$errstr$timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));

修改为:

1
2
3
4
5
6
7
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno$errstr$timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (!$this->_stream) {
    $this->_stream = @pfsockopen($host$this->_params['port'], $errno$errstr$timeout);
}
if (!$this->_stream) {
    $this->_stream = @fsockopen($host$this->_params['port'], $errno$errstr$timeout);
}

经过以上修改,最终测试,阿里云主机完美支持Yii2这套程序,并且可以正常smtp发送邮件啦!


来自  http://www.gwork.cn/post-29.html

普通分类: