不支持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 相关文章推荐
php adodb介绍
Mar 19 PHP
PHP 七大优势分析
Jun 23 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
php+iframe 实现上传文件功能示例
Mar 04 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
php中定义网站根目录的常用方法
2010/08/08 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
手机被没收检讨书
2014/02/22 职场文书
开工仪式主持词
2014/03/20 职场文书
公证书样本
2014/04/10 职场文书
爱心捐书活动总结
2014/07/05 职场文书
学习教师法的心得体会
2014/09/03 职场文书
大雁塔导游词
2015/02/04 职场文书
外出学习心得体会范文
2016/01/18 职场文书
党员理论学习心得体会
2016/01/21 职场文书