这让我发疯了。我们有IIS(6)和Windows 2008以及ActiveState Perl 5.10。出于某种原因,每当我们发出警告或鲤鱼时,它最终会破坏应用程序池。当然,这是一个非常重要的事情,因为这意味着我们的错误实际上会导致问题。
这发生在以前版本的Perl(5.8)和Windows(2003)以及IIS(5)中。无论如何,基本上我放入carp
或warn
并收到错误消息然后是一些垃圾文本。有什么想法吗?
答案 0 :(得分:2)
检查以确保IIS和perl DLL与相同版本的C运行时库链接。 (使用depends.exe或dumpbin / dependents)。
要扩展:问题可能是IIS在一个地方有它的FILE *表,并且perl DLL认为它将在一个稍微不同的地方。当perl去寻找stderr句柄时,它会将随机内存视为文件句柄,并具有可预测的结果。
答案 1 :(得分:0)
尝试将以下内容添加到脚本的顶部:
BEGIN {
open STDERR, '>> c:/iisError.log'
or die "Can't write to c:/issError.log: $!\n";
binmode STDERR;
}
我不确定你为什么会遇到这个问题。但是,上述代码将解决关于此类问题的来源的几个“疯狂”猜测。
(自从我阅读在Win32中附加文件的源代码以来已经有一段时间了,但是,我记得,>>模式加上binmode意味着从不同进程写入文件不太可能发生冲突,防止日志中的重叠文本。)
答案 2 :(得分:0)
一些建议:
答案 3 :(得分:0)
更新:我发现只有在警告中有变量时才会发生此错误。如果警告只是常规文本,则没有问题。此外,变量不能为空,看起来你必须有两个带有非空变量的警告才能找到错误。