不支持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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
PHP中串行化用法示例
Nov 16 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
jquery中radio checked问题
2015/03/16 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中分数的相关使用教程
2015/03/30 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Windows下安装Scrapy
2018/10/17 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python是怎样处理json模块的
2020/07/16 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
施工资料员的岗位职责
2013/12/22 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书