不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2015-01-24信息快讯网
网站上线,modoer与ucenter 下不能通讯折腾了我差不多二天,开始都以为自己的配置出问题,移植了平台后就不能通讯了,修改了几次配置,都没有成功
所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的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,网上的资料还是好多的,所以也没有什么阻碍,不过就不知这个修改会不会影响其它的东西,还有待测试罗。。。。
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
PHP header()函数使用详细(301、404等错误设置)
关于PHP的相似度计算函数:levenshtein的使用介绍
关于shopex同步ucenter的redirect问题,导致script不运行
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
php中DOMElement操作xml文档实例演示
PHP 自定义错误处理函数trigger_error()
file_get_contents获取不到网页内容的解决方法
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
利用PHP扩展vld查看PHP opcode操作步骤
PHP中CURL方法curl_setopt()函数的参数分享
PHP fopen 读取带中文URL地址的一点见解
比较discuz和ecshop的截取字符串函数php版
PHP简洁函数小结
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
shopex中集成的站长统计功能的代码简单分析
php的urlencode()URL编码函数浅析
PHP header函数分析详解
PHP源代码数组统计count分析
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
PHP调用Webservice实例代码
关于php连接mssql:pdo odbc sql server
在WAMP环境下搭建ZendDebugger php调试工具的方法
php array_pop()数组函数将数组最后一个单元弹出(出栈)
php array_intersect比array_diff快(附详细的使用说明)
php header Content-Type类型小结
PHP采集利器 Snoopy 试用心得
yii框架源码分析之创建controller代码
PHP读取网页文件内容的实现代码(fopen,curl等)
不重新编译PHP为php增加openssl模块的方法