当我使用的fsockopen打开一个PHP页面,代码工作正常,但也有一些其他的问题。 例如:如果我在a.php只会打开b.php,“回声”不会b.php,错误信息的工作既没有(这2个东西的作品共同页上的罚款)。 这使得调试非常困难。 如何让网页B输出?
非常感谢! 这里是我的代码。 我用main.php打电话main_single_block.php.PS:所有事情的工作,除了两件事情上面我mentiond罚款。
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);
这里的基本结构:
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:
响应的头。
实际的应用程序应该解析响应报头,我上面的代码只是跳过他们。 的报头由一个空行终止,则它收集的输出的剩余部分到变量中。