這一直讓我發瘋。我們有IIS(6)和Windows 2008以及ActiveState Perl 5.10。出於某種原因,每當我們發出警告或鯉魚時,它最終都會破壞應用程序池。當然,這是一個非常大的交易,因爲這意味着我們的錯誤實際上會導致問題。爲什麼在我打印到Perl中的stderr時IIS會崩潰?
這發生在Perl(5.8)和Windows(2003)和IIS(5.)的前一版本中,無論如何,基本上我把或warn
和我得到一個錯誤消息,然後一些垃圾文本。有什麼想法嗎?
這一直讓我發瘋。我們有IIS(6)和Windows 2008以及ActiveState Perl 5.10。出於某種原因,每當我們發出警告或鯉魚時,它最終都會破壞應用程序池。當然,這是一個非常大的交易,因爲這意味着我們的錯誤實際上會導致問題。爲什麼在我打印到Perl中的stderr時IIS會崩潰?
這發生在Perl(5.8)和Windows(2003)和IIS(5.)的前一版本中,無論如何,基本上我把或warn
和我得到一個錯誤消息,然後一些垃圾文本。有什麼想法嗎?
嘗試添加以下到腳本的頂部:
BEGIN {
open STDERR, '>> c:/iisError.log'
or die "Can't write to c:/issError.log: $!\n";
binmode STDERR;
}
我不知道你爲什麼會出現這個問題。但是,上述代碼將解決針對此類問題的來源的幾個「瘋狂」猜測。 (我已經有一段時間了,因爲我讀了Win32中附加文件的源代碼,但是,我記得>>模式加binmode意味着從不同進程寫入文件不太可能發生衝突,重疊文本日誌中)
一對夫婦的建議:
檢查以確保IIS和perl的DLL與相同版本的C運行時庫的鏈接的文件。 (使用depends.exe或者dumpbin/dependents)。
要展開:這個問題可能是IIS有FILE *表中的一個地方,perl的DLL認爲這將是在一個稍微不同的地方。當perl去查找stderr句柄時,它會將隨機內存視爲文件句柄,並帶有可預測的結果。
安裝iis的任何想法?我似乎無法找到任何東西...... – 2008-10-13 15:46:07
更新:我發現這個錯誤只發生在警告中有一個變量時。如果警告只是常規文本,則不存在任何問題。此外,該變量不能爲空,它看起來像你必須有兩個警告與非空變量來擊中該錯誤。
由於某種原因,這不起作用。它清楚地創建了我要求它登錄的文件,但它仍然會轉到舊的日誌文件。我甚至試圖通過打印STDERR'foo'來強制它,並且它仍然打印到舊文件。 – 2008-10-13 18:00:34