2

我正在尝试让我的 CGI 脚本在我的网络主机(在 FreeBSD 上运行)上运行。为了调试为什么我不断收到可怕的“脚本头过早结束”错误,他们的支持建议我将所有输出重定向到 stderr,而不是printing 它。查找如何做到这一点,我遇到了一张关于它的非常古老的RAMBO 票,但看起来它从未实现过。

根据这个问题的一些答案,似乎我应该能够call {echo Hello, world >&2}做到这一点,但它不起作用。

如何在 REBOL2 中写入 stderr?

4

4 回答 4

0

该网页有一些建议http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/ 来解决您的实际问题。也许您没有将标题打印为脚本中的第一件事,这必须是第一件事。可能权限不够,或者 .r 文件类型未正确添加到您的 .htaccess 中作为 cgi 文件。您的(正确的!)rebol core exe 没有正确的权限。或者您的脚本最终陷入无限循环?

于 2015-01-15T14:34:57.320 回答
0

对于我的 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; 
于 2015-01-15T02:37:09.043 回答
0

重定向 Rebol cgi 脚本错误的一些提示: http ://www.rebol.com/docs/core23/rebolcore-2.html#section-6.2

于 2015-01-17T10:08:04.200 回答
0

迟到总比没有好...我刚刚在我的 Rebol fork 中为 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
于 2021-12-17T18:32:14.613 回答