当我使用fsockopen打开一个php页面时,代码工作正常,但还有一些其他问题。例如:如果我在a.php中打开b.php," echo"在b.php中没有工作,也没有错误信息(这两件事在普通页面上工作正常)。这使得调试非常困难。如何在第b页中获得输出?
非常感谢!这是我的代码。我使用main.php来调用main_single_block.php.PS:除了我上面提到的两件事之外,所有事情都可以正常工作。
main.php:
$template_url_arr_s = serialize($template_url_arr);
$fp = fsockopen($sochost, intval($socportno), $errno, $errstr, intval($soctimeout));
if (!$fp) {
echo "$errstr ($errno) ,open sock erro.<br/>\n";
}
$typename= urlencode($typename);//do url encode (if not, ' 'can not be handled right)
$template_url_arr_s= urlencode($template_url_arr_s);
*$out = "GET /main/main_single_block.php?typename=" . $typename . "&templateurlarr=" . $template_url_arr_s . "\r\n";*
fputs($fp, $out);
fclose($fp);
答案 0 :(得分:1)
这是基本结构:
template_url_arr_s = serialize($template_url_arr);
$fp = fsockopen($sochost, intval($socportno), $errno, $errstr, intval($soctimeout));
if (!$fp) {
echo "$errstr ($errno) ,open sock erro.<br/>\n";
}
$typename= urlencode($typename);//do url encode (if not, ' 'can not be handled right)
$template_url_arr_s= urlencode($template_url_arr_s);
$out = "GET /main/main_single_block.php?typename=" . $typename . "&templateurlarr=" . $template_url_arr_s . " HTTP/1.1\r\nHost: $sochost\r\nConnection: close\r\n\r\n";
fputs($fp, $out);
// First read until the end of the response header, look for blank line
while ($line = fgets($fp)) {
$line = trim($line);
if ($line == "") {
break;
}
}
$output = '';
// Read the body of the response
while ($line = fgets($fp)) {
$output .= $line;
}
fclose($fp);
我已将HTTP/1.1
参数添加到GET
行的末尾,所需的Host:
标题和Connection: close
标题,因此我不需要处理解析响应的Content-Length:
标题。
一个真正的应用程序应该解析响应头,我上面的代码只是跳过它们。标题以空行结束,然后将剩余的输出收集到变量中。