手机
当前位置:查字典教程网 >编程开发 >php教程 >不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
摘要:所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的L1主机不支持fsockopen,在文件uc_c...

所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的L1主机不支持fsockopen,在文件uc_client/client.php中的uc_fopen中出现了问题,这里的代码是这样:

复制代码 代码如下:

function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {

$return = '';

$matches = parse_url($url);

!isset($matches['host']) && $matches['host'] = '';

!isset($matches['path']) && $matches['path'] = '';

!isset($matches['query']) && $matches['query'] = '';

!isset($matches['port']) && $matches['port'] = '';

$host = $matches['host'];

$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';

$port = !empty($matches['port']) ? $matches['port'] : 80;

if($post) {

$out = "POST $path HTTP/1.0rn";

$out .= "Accept: */*rn";

//$out .= "Referer: $boardurlrn";

$out .= "Accept-Language: zh-cnrn";

$out .= "Content-Type: application/x-www-form-urlencodedrn";

$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";

$out .= "Host: $hostrn";

$out .= 'Content-Length: '.strlen($post)."rn";

$out .= "Connection: Closern";

$out .= "Cache-Control: no-cachern";

$out .= "Cookie: $cookiernrn";

$out .= $post;

} else {

$out = "GET $path HTTP/1.0rn";

$out .= "Accept: */*rn";

//$out .= "Referer: $boardurlrn";

$out .= "Accept-Language: zh-cnrn";

$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";

$out .= "Host: $hostrn";

$out .= "Connection: Closern";

$out .= "Cookie: $cookiernrn";

}

$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);

if(!$fp) {

return '';//note $errstr : $errno rn

} else {

stream_set_blocking($fp, $block);

stream_set_timeout($fp, $timeout);

@fwrite($fp, $out);

$status = stream_get_meta_data($fp);

if(!$status['timed_out']) {

while (!feof($fp)) {

if(($header = @fgets($fp)) && ($header == "rn" || $header == "n")) {

break;

}

}

$stop = false;

while(!feof($fp) && !$stop) {

$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));

$return .= $data;

if($limit) {

$limit -= strlen($data);

$stop = $limit <= 0;

}

}

}

@fclose($fp);

return $return;

}

}

fsockopen函数不能使用,因些就只能靠其它方法了,幸亏支持curl,file_get_contents也支持,经考虑就用curl吧,修改了uc_fopen函数,如下;

复制代码 代码如下:

function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {

$return = '';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

if($post) {

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $post);

}

if($cookie) {

curl_setopt($curl, CURLOPT_COOKIE, $cookie);

}

curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$return = curl_exec($curl);

if (curl_errno($curl)) {

echo '<pre><b>错误:</b><br />'.curl_error($curl);

}

curl_close($curl);

return $return;

}

于是modoer下的uc_client/client.php和uchome下的uc_cilent/client.php,就这样修改了uc_open函数,呵呵,第一次使用curl,网上的资料还是好多的,所以也没有什么阻碍,不过就不知这个修改会不会影响其它的东西,还有待测试罗。。。。

【不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题】相关文章:

php操作redis缓存方法分享

PHP date函数常用时间处理方法

正则表达式语法

PHP调用三种数据库的方法(2)

php微信公众平台开发类实例

网站当前的在线人数

支持中文的PHP按字符串长度分割成数组代码

我常用的几个类

php中file_exists函数使用详解

递归实现php数组转xml的代码分享

精品推荐
分类导航