• 技术文章 >后端开发 >php教程

    不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题_PHP教程

    2016-07-21 15:25:13原创343
    所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的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'] : '') : '//m.sbmmt.com/m/';
    $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 '
    错误:
    '.curl_error($curl);
    }
    curl_close($curl);
    return $return;
    }

    于是modoer下的uc_client/client.php和uchome下的uc_cilent/client.php,就这样修改了uc_open函数,呵呵,第一次使用curl,网上的资料还是好多的,所以也没有什么阻碍,不过就不知这个修改会不会影响其它的东西,还有待测试罗。。。。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/324163.htmlTechArticle所以就怀疑是否编码问题,或者文件权限问题,或者是不是函数不支持问题,经过排查发现原来是万网的L1主机不支持fsockopen,在文件uc_cl...

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    专题推荐:不支持 fsockopen 支持 culr 环境 下下 ucenter modoer 通讯 问题 所以 怀疑
    上一篇:php简单的会话类代码_PHP教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 浅析PHP8.0特性:Named Parameter(命名参数)• 手把手教你用PHP快速连接SqlServer• 鸡肋的PHP单例模式应用详解_PHP• php 将bmp图片转为jpg等其他任意格式的图片_PHP• 将数组写入txt文件 var_export_PHP
    1/1

    PHP中文网