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;希望能提供思路,若是与系统有关,不能解决,也望能详细讲明原理。
//$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;希望能提供思路,若是与系统有关,不能解决,也望能详细讲明原理。
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来判断
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);
}
大哥,理解错我的意思了,代码我会写,测试也能成功,但是在某些特殊的环境下却不能成功,上面写明了是ubuntu的环境,代码是supesite开源系统中与ucenter通信时产生的,导致了程序安装时不成功,是一个很严重的问题,如果是教我怎么在常规环境下写就算了。上面的错误也查过,好像是在特定的环境下才会产生的,只是分别在哪些环境下,是什么原因导致的不成功,本人不是很理解,所以才想到这里来求个解。
感觉像是你的空间不给用,要花钱买阿
phpinfo看过的,在disable_function中没有fsockopen函数,却有一个pfsockopen函数,查了一下,功能类似,应该不影响。
pfsockopen是持久连接, 可能比fsockopen更耗资源
http://www.zymic.com/forum/index.php?showtopic=27507