不支持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的面向对象编程
Oct 09 PHP
cache_lite试用
Feb 14 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
Laravel 前端资源配置教程
Oct 18 PHP
laravel框架创建授权策略实例分析
Nov 22 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
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
金融专业推荐信
2013/11/14 职场文书
终止劳动合同协议书
2014/04/14 职场文书
无房证明范本
2014/09/17 职场文书
办公室管理规章制度
2015/08/04 职场文书
数学复习课教学反思
2016/02/18 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers