Warning: fsockopen(): fsockopen() functionality if not on by default; please purchase this option by contacting zymic.com in /www/zxq.net/k/a/r/kartmodel/htdocs/uc_client/client.php on line 270 使用fsockopen时报上面的错误,提示参数不正确,但都是正常的,如下:
//$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
echo function_exists('fsockopen') ? '存在': '不存在';
$fp = fsockopen('kartmodel.zxq.net', 80);//, $errno, $errstr, $timeout ($ip ? $ip : $host)   不管参数怎么改,都不成功
echo $fp ? 'ff' : 'aa';
echo $ip;
echo $host;
echo $host;
echo $errno;
echo $errstr;
echo $timeout;
exit;希望能提供思路,若是与系统有关,不能解决,也望能详细讲明原理。

解决方案 »

  1.   

    看不出来你的,我贴一个给你,以前测试过的,有注释:
     fsockopen()    发送一个POST请求的过程:
        发送请求的参数: 
                POST $url HTTP/1.0\r\n  Content-Type: application/x-www-form-urlencoded\r\n 
                Content-Length: " . strlen($req) . "\r\n\r\n  后面跟上 请求的参数    domain,样式: 'localhost'  不带协议http  等
        /**
         * php fsockopen发送post请求 
         * @param $ip 域 domain,样式: 'localhost'  不能跟 http://
         * @param $condition 请求的参数
         * @param $url 请求的地址
         */
        function sock_post($ip,$condition,$url){   
        $req=$condition;   
            //
    $header .= "POST $url HTTP/1.0\r\n";   
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";   
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";   
    //打开一个和服务器的连接,
    $fp = fsockopen ($ip,80, $errno, $errstr,30);   
    if(!$fp){ 
       echo '--ERROR--'.$ip.' can not open';   
    }else{   
      $inHeader = 1;
      $res = '';
      $line = '';
      fputs ($fp, $header . $req); 
      while (!feof($fp)) {  
       $line = fgets ($fp, 1024);
                    
       if($inHeader && ($line == "\n" || $line == "\r\n")){
    $inHeader = 0;
        }else if(!$inHeader){
         $res .= $line;
        } 
      }   
     } 
         fclose ($fp);   
         return $res;  
     }///~sock_post()  php发送post请求注意事项:
             请求是在后台处理,页面的url是不变的,必须将$res echo出来,后面不能跟echo语句,否则页面显示为后面输出的
             内容 比如:$res 为get的页面内容
                        echo $res ;
                        echo '123';
             这样页面只会输出 123;         php的post请求信息带有 HTTP信息,上面的程序可以过滤掉这些信息,只输出真是的页面信息
             以\n 或者 \r\n来判断
      

  2.   

    不懂,纯Support一下的,,。。关注
      

  3.   

    //这是手册的代码, 在我机器上正常运行, 楼主可以试下, 那里报错, 请跟帖$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET / HTTP/1.1\r\n";
        $out .= "Host: www.example.com\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
      

  4.   


    大哥,理解错我的意思了,代码我会写,测试也能成功,但是在某些特殊的环境下却不能成功,上面写明了是ubuntu的环境,代码是supesite开源系统中与ucenter通信时产生的,导致了程序安装时不成功,是一个很严重的问题,如果是教我怎么在常规环境下写就算了。上面的错误也查过,好像是在特定的环境下才会产生的,只是分别在哪些环境下,是什么原因导致的不成功,本人不是很理解,所以才想到这里来求个解。
      

  5.   

    关于特定环境不知你指那些,你说的ubuntu的环境好像之前没提及过, fsockopen 的php版本是4和5第五个参数是php版本 > 4.3.0,  Added support for the timeout parameter on win32我说的那个例子, 意思是叫你随便改参数测试一下, 你不是说0楼的帖怎么改参数都不正确吗?
      

  6.   

    Warning: fsockopen(): fsockopen() functionality if not on by default; please purchase this option by contacting zymic.com in /www/zxq.net/k/a/r/kartmodel/htdocs/uc_client/client.php on line 270 
    感觉像是你的空间不给用,要花钱买阿
      

  7.   


    phpinfo看过的,在disable_function中没有fsockopen函数,却有一个pfsockopen函数,查了一下,功能类似,应该不影响。
      

  8.   


    pfsockopen是持久连接, 可能比fsockopen更耗资源
      

  9.   

    是zymic空间不支持,他们客服已经说了 不支持fsockopen
    http://www.zymic.com/forum/index.php?showtopic=27507