不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题


Posted in PHP onAugust 12, 2011

所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的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.0\r\n"; 
$out .= "Accept: */*\r\n"; 
//$out .= "Referer: $boardurl\r\n"; 
$out .= "Accept-Language: zh-cn\r\n"; 
$out .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= 'Content-Length: '.strlen($post)."\r\n"; 
$out .= "Connection: Close\r\n"; 
$out .= "Cache-Control: no-cache\r\n"; 
$out .= "Cookie: $cookie\r\n\r\n"; 
$out .= $post; 
} else { 
$out = "GET $path HTTP/1.0\r\n"; 
$out .= "Accept: */*\r\n"; 
//$out .= "Referer: $boardurl\r\n"; 
$out .= "Accept-Language: zh-cn\r\n"; 
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n"; 
$out .= "Cookie: $cookie\r\n\r\n"; 
} 
$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); 
if(!$fp) { 
return '';//note $errstr : $errno \r\n 
} 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 == "\r\n" || $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,网上的资料还是好多的,所以也没有什么阻碍,不过就不知这个修改会不会影响其它的东西,还有待测试罗。。。。
PHP 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
Apr 01 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
PHP与以太坊交互详解
Aug 24 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 PHP
Cookie跨域问题解决方案代码示例
Nov 24 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 #PHP
php 文章调用类代码
Aug 11 #PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 #PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 #PHP
pdo中使用参数化查询sql
Aug 11 #PHP
php 广告调用类代码(支持Flash调用)
Aug 11 #PHP
php 中英文语言转换类代码
Aug 11 #PHP
You might like
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
如何删除多级目录
2006/10/09 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python3爬虫全国地址信息
2019/01/05 Python
Python 20行简单实现有道在线翻译的详解
2019/05/15 Python
python微信公众号开发简单流程实现
2020/03/09 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
python中有帮助函数吗
2020/06/19 Python
为什么说python更适合树莓派编程
2020/07/20 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
应届生会计电算化求职信
2013/10/03 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
人资专员岗位职责
2014/04/04 职场文书
公司贷款承诺书
2014/05/30 职场文书
党在我心中演讲稿
2014/09/02 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
鲁迅故里导游词
2015/02/05 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
党员转正大会主持词
2015/07/02 职场文书
旷工检讨书大全
2015/08/15 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
总结高并发下Nginx性能如何优化
2021/11/01 Servers
vue实现简易音乐播放器
2022/08/14 Vue.js