fsockopen,pfsockopen函数被禁用时Ucenter的修改办法

最后修订:
2012-12-30 17:33:08
建站教程

摘要:安装DISCUZ因fsockopen,pfsockopen函数禁用,导致Ucenter通信失败的的修改办法

因为fsockopen函数存在着重大安全隐患,黑客利用程序漏洞注入后使用 fsockopen 进行可以进行PHPDDOS 攻击,所以现在越来越多的空间商开始禁用此函数,discuz2.5已经做了兼容处理,当不支持fsockopen,pfsockopen时使用stream_socket_client来建立连接,但不知道是UC和DZ是两个不同的研发部门有沟通障碍还是咋的,UC竟然没有做此兼容处理。

言归正传, 修改uc_client/client.php

搜索
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;
}


修改为
 
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')) {
$fp = @stream_socket_client($ip.':'.$port, $errno, $errstr, $timeout);
} else {
$fp = false;
}


uc_client/model/misc.php

搜索
 
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;
}


修改为
 
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')) {
$fp = @stream_socket_client($ip.':'.$port, $errno, $errstr, $timeout);
} else {
$fp = false;
}


uc_server/model/misc.php

搜索
 
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;
}


修改为
 
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')) {
$fp = @stream_socket_client($ip.':'.$port, $errno, $errstr, $timeout);
} else {
$fp = false;
}


改完这三个文件后,通信成功了,但数据同步还是失败的,还需要在UC应用管理里给应用IP 填上网站的IP。然后通信成功!!

本站所有内容来自网络收集整理和站长原创,未经作者授权,不得用作他用。

如对本站内容有所疑问,请点击右下角的“反馈建议”将您的问题提交给我。