<?php
$forks = 2;
switch ($forks) {
case 1:
$ob_file = fopen('case1.txt','w');
function ob_file_callback($buffer)
{
global $ob_file;
fwrite($ob_file,$buffer);
}
ob_start('ob_file_callback');
echo $ip = $_SERVER['REMOTE_ADDR'];
ob_end_flush();
header("LOCATION: case1.php");
case 2:
$ob_file = fopen('case2.txt','w');
function ob_file_callback($buffer)
{
global $ob_file;
fwrite($ob_file,$buffer);
}
ob_start('ob_file_callback');
echo $ip = $_SERVER['REMOTE_ADDR'];
ob_end_flush();
;
header("LOCATION: case2.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
如果我选择 $forks = 1,它会写入 case2.txt,这很疯狂,但确实如此。它不仅无法重定向 LOCATION,而且甚至不会显示默认页面。它声称标题位置存在问题,因为标题已经发送,这是超现实的。然后,即使我没有要求它重新声明 ob_file_callback 因为它在案例 2 中并且我选择了案例 1,但它声称无法在案例 2 中的 ob_file_callback 上重新声明 ob_file_callback。
如果我选择 $forks = 2,它不会写入任何文件,只是声称它不能修改头信息,所以这是另一个头重定位失败,这也是愚蠢的。然而,它确实给了我默认页面,但这只会让我更加困惑。
我对 fwrite、ob_start 或 ob_end_flush 或任何正在写入文件的东西的问题是它只会写入一次。无论是那个还是它每次打开它都会擦除文件,所以产生的问题是当forks 1确实写入case2.txt时,它总是只有1个字符串坐在那里。
第一轮更正:
<?php
function ob_file_callback($buffer)
{
global $ob_file;
fwrite($ob_file,$buffer);
}
$forks = 1;
switch ($forks) {
case 1:
$ob_file = fopen('case1.txt','w');
ob_start('ob_file_callback');
echo $ip = $_SERVER['REMOTE_ADDR'];
ob_end_flush();
header("LOCATION: case1.php");
exit;
break;
case 2:
$ob_file = fopen('case2.txt','w');
ob_start('ob_file_callback');
echo $ip = $_SERVER['REMOTE_ADDR'];
ob_end_flush();
header("LOCATION: case2.php");
}
exit
?>