Perl 如何在IIS下设置LC_ALL和LANG?
我正在尝试在IIS下运行一些Perl CGI脚本。我得到以下信息:Perl 如何在IIS下设置LC_ALL和LANG?,perl,iis,cgi,locale,Perl,Iis,Cgi,Locale,我正在尝试在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
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”,但没有效果
欢迎指点 您的Perl应用程序似乎正在将其错误发送到浏览器,并且在发送头之前会发生错误 如果您使用的是CGI模块,第一个问题可能是由
使用CGI::CARP qw(fatalsToBrowser)
引起的
在这种情况下,
fatalsToBrowser
的危害比它的用处更大,因此我建议您暂时关闭它。可能会对您有所帮助。它甚至还有一个疑难解答部分。您可以通过设置PERL\u BADLANG=0来抑制此错误,但与LC\u ALL一样,需要在运行PERL脚本之前设置它。LANG和LC\u ALL环境变量是为shell设置的,但它们不是为IIS设置的。我不是IIS的人,但文件说IIS是一项服务,你必须提前设置,然后重新启动
或者,您可以在脚本开始编译时(以及在加载导致问题的大型库之前)设置这些变量:
BEGIN {
$ENV{LC_ALL} = ...;
$ENV{LANG} = ...;
}
开始{
$ENV{LC_ALL}=。。。;
$ENV{LANG}=。。。;
}
通过查看shell中的值来获取应该使用的值
祝你好运,实际上,“CGI::Carp安排向浏览器发送一个最小的HTTP头,这样即使是在早期编译阶段出现的错误也能被看到。”(来自CGI::Carp的文档)。我怀疑是Perl本身造成了这些警告?我在这里做了一个有根据的猜测。如果我没记错的话,IIS也想要/想要HTTP响应头的第一行(“HTTP/1.1 200 OK”),这与apache和大多数其他Web服务器不同。可能是CGI::Carp没有做到这一点。