我正在改变现有解决方案中的一些Perl脚本.由于升级(Windows)服务器时发生了一些变化,我将它们从运行ISAPI切换到CGI.这意味着我现在必须手动发送Content-Type,否则它将失败.
所以我需要启用输出缓冲(print语句,所以STDOUT),发送Content-Type:text/html,但是在它是重定向的情况下我需要清除输出缓冲区并发送新的标题.
我怎么做?
或者还有另一种方式吗?请注意,该脚本已print用于输出HTML,我无法更改.(它写于90年代初期.)
select(STDOUT);
$| = 0;
print "Content-Type: text/html\n\n";
# somehow clear output
print "Location: login.pl\n\n";
Run Code Online (Sandbox Code Playgroud)
你无法"撤消" print到STDOUT.在向STDOUT发送任何内容之前,您需要决定是生成HTML输出还是重定向.
这样做的一种方法是select使用内存缓冲区而不是STDOUT:
my $buffer = '';
open(my $out, '>', \$buffer) or die;
select($out);
print "Content-Type: text/html\n\n";
if (generate_redirect) {
print STDOUT "Location: login.pl\n\n";
} else {
print STDOUT $buffer;
}
Run Code Online (Sandbox Code Playgroud)
只要您确定不会生成重定向,就可以重新selectSTDOUT并输出缓冲区:
select STDOUT;
print $buffer;
print "<p>HTML now goes to client instead of \$buffer</p>\n";
Run Code Online (Sandbox Code Playgroud)