不支持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 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
PHP中的一些常用函数收集
May 26 PHP
zend framework中使用memcache的方法
Mar 04 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
使用laravel指定日志文件记录任意日志
Oct 17 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 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和ACCESS写聊天室(三)
2006/10/09 PHP
PHP 字符串分割和比较
2009/10/06 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
php单例模式的简单实现方法
2016/06/10 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
用JS实现的一个include函数
2007/07/21 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
详解js中==与===的区别
2017/01/08 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
python爬虫请求头设置代码
2020/07/28 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
学雷锋活动总结报告
2014/06/26 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python