我正在尝试让我的 CGI 脚本在我的虚拟主机上运行(运行在 FreeBSD 上)。为了调试为什么我总是收到可怕的"脚本标头过早结束"错误,他们的支持建议我将所有输出重定向到 stderr,而不是print
它。查找如何执行此操作,我遇到了一张非常旧的RAMBO票证,但看起来它从未实施过。
根据这个问题的一些答案,似乎我应该能够做一个call {echo Hello, world >&2}
来实现这一点,但它不起作用。
如何在 REBOL2 中写入 stderr?
对于我的CGI特定场景,我有一个非常糟糕的解决方法。由于在Perl中写入stderr(我完全不熟悉)是单行的,我目前正在从Perl调用REBOL脚本并从那里将其输出打印到stderr:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
# Note the backticks
my $the_string = `/home/public/rebol -csw test-reb.cgi`;
print STDERR $the_string;
这个网页有一些建议 http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/解决您的实际问题。也许您没有在脚本中打印标题作为第一件事,这必须是要做的第一件事。也许权限不够,或者 .r 文件类型没有正确添加到您的 .htaccess 作为 cgi 文件。您的(正确!)rebol 核心可执行文件没有正确的权限。或者您的脚本最终陷入无限循环?
Rebol cgi 脚本错误的一些提示:http://www.rebol.com/docs/core23/rebolcore-2.html#section-6.2
迟到总比没有好...我刚刚在我的 Rebol 分支中为 Rebol3 实现了它。
https://github.com/Oldes/Rebol-issues/issues/2468
语法可能会有所改变,因为我不喜欢系统控制台端口被命名为 input
,尽管它不仅用于输入。
到目前为止是:
print 1 ;<- std_out
modify system/ports/input 'error on
print 2 ;<- std_err
modify system/ports/input 'error off
print 3 ;<- std_out