不支持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 变量的定义方法
Jan 26 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
普天C++笔试题
2016/03/20 面试题
军训生自我鉴定范文
2013/12/27 职场文书
个人综合鉴定材料
2014/05/23 职场文书
2014年国庆标语
2014/06/30 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
军训新闻稿范文
2015/07/17 职场文书
小学英语新课改心得体会
2016/01/22 职场文书