我正在尝试在IIS下运行一些Perl CGI脚本。我收到以下消息:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
我发现只有当我“使用”我们的内部库时才会出现问题,但它真的很重要(使用许多其他东西),所以我更愿意知道在哪里看。当我从命令行运行相同的脚本时,脚本运行得很好。我试图将“LANG”设置为“C”,然后将“LC_ALL”设置为“C”,但它没有效果。
欢迎任何指示!
答案 0 :(得分:2)
为shell设置了LANG和LC_ALL环境变量,但是没有为IIS设置它们。我不是IIS的人,但文档说IIS是一项服务,你必须提前设置,然后重新启动。
或者,您可以在脚本开始编译时(以及在加载导致问题的大型库之前)设置这些变量:
BEGIN { $ENV{LC_ALL} = ...; $ENV{LANG} = ...; }
通过查看shell中的值来获取应该使用的值。
祝你好运,答案 1 :(得分:0)
您的Perl应用程序似乎正在向浏览器发送错误,并且在发送标头之前发生错误。
如果您使用的是CGI模块,则第一个可能由use CGI::CARP qw(fatalsToBrowser)
引起。
在这种情况下fatalsToBrowser
造成的伤害比使用时更大,所以我建议你暂时将其关闭。
答案 2 :(得分:0)
perldoc for locale可能会对您有所帮助。它甚至还有一个故障排除部分。
答案 3 :(得分:0)
您可以通过设置PERL_BADLANG = 0来抑制此错误,但是,在运行Perl脚本之前,需要设置,如LC_ALL。