不支持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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
PHP sprintf() 函数的应用(定义和用法)
Jun 29 PHP
php使用curl抓取qq空间的访客信息示例
Feb 28 PHP
一个经典的PHP验证码类分享
Nov 18 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
twig模板常用语句实例小结
Feb 04 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 PHP
Yii 框架入口脚本示例分析
May 19 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
支付宝接口开发集成支付环境小结
2015/03/17 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
js调用css属性写法
2013/09/21 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python 线程池用法简单示例
2019/10/02 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
优秀的毕业生的自我评价
2013/12/12 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
国庆庆典邀请函
2015/02/02 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
《搭石》教学反思
2016/02/18 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python