不支持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 5.0对象模型深度探索之对象复制
Mar 27 PHP
php上传文件的增强函数
Jul 21 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 PHP
goto语法在PHP中的使用教程
Sep 17 PHP
php字符串倒叙
Apr 01 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
php 定义404页面的实现代码
2012/11/19 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
angularjs中的e2e测试实例
2014/12/06 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Python创建xml文件示例
2017/03/22 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
django中ImageField的使用详解
2020/12/21 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
车贷收入证明范本
2014/01/09 职场文书
电气工程师岗位职责
2015/02/12 职场文书
六年级作文之自救
2019/12/19 职场文书
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers