不支持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 相关文章推荐
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
php 在文件指定行插入数据的代码
May 08 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 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
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php中的登陆login实例代码
2016/06/20 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
小程序自定义日历效果
2018/12/29 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
python 从csv读数据到mysql的实例
2018/06/21 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python使用matplotlib绘制热图
2018/11/07 Python
python画微信表情符的实例代码
2019/10/09 Python
python scatter函数用法实例详解
2020/02/11 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
《走一步再走一步》教学反思
2014/02/15 职场文书
住宅质量保证书
2014/04/29 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
干部作风建设心得体会
2014/10/22 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL