空间安装了discuz X2.5,安装时提示fsockopen和pfsockopen函数被禁用,没有理会继续安装,安装过程没出现错误但是进入后台Ucenter却发现通信失败,跟踪了一下代码发现问题出现在uc_server/model/misc.php的95-101行代码如下:
if(function_exists('fsockopen')) {
$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
} elseif (function_exists('pfsockopen')) {
$fp = @pfsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
} else {
$fp = false;
}
因为空间禁用了fsockopen和pfsockopen函数所以$fp成了false了,好在还有stream_socket_client函数可用(可以参考以前文章:fsockopen函数被禁用的解决方案),将代码修改为:
- if(function_exists('fsockopen')) {
- $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
- } elseif (function_exists('pfsockopen')) {
- $fp = @pfsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
- }elseif(function_exists('stream_socket_client')) {
- $hostname = $ip ? $ip : $host;
- $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout);
- } else {
- $fp = false;
- }