不支持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
PHP中对数据库操作的封装
Oct 09 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
简单的php购物车代码
Jun 05 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
PR值查询 | PageRank 查询
2006/12/20 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
动态添加js事件实现代码
2009/03/12 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
个人贷款担保书
2014/04/01 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
企业年会祝酒词
2015/08/11 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python