欢迎各位兄弟 发布技术文章
这里的技术是共享的
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发送邮件啦!