当我使用fsockopen打开一个php页面时,代码可以正常工作,但是还有其他一些问题。例如:如果我在b.php中打开a.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);发布于 2014-10-03 15:49:35
以下是基本结构:
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:头。
一个真正的应用程序应该解析响应头,上面的代码只是略过它们。标题以空行结束,然后将输出的其余部分收集到变量中。
https://stackoverflow.com/questions/26173349
复制相似问题