2008-10-09 6 views
2

이것은 나를 미치게 만들었습니다. IIS (6) 및 Windows 2008 및 ActiveState Perl 5.10이 있습니다. 어떤 이유로 우리가 경고 나 잉어를 할 때마다 결국 앱 풀이 손상됩니다. 물론, 그것은 우리의 실수가 실제로 문제를 일으킨다는 것을 의미하기 때문에 꽤 큰 거래입니다.Perl에서 stderr로 인쇄 할 때 IIS가 충돌하는 이유는 무엇입니까?

이전 버전의 Perl (5.8), Windows (2003) 및 IIS (5)에서 발생했습니다. 어쨌든 기본적으로 또는 warn을 입력하면 오류 메시지가 표시되고 일부 가비지 텍스트가 표시됩니다. 이견있는 사람? 추가 귀하의 스크립트의 상단에 다음과 같은

답변

0

시도 :

BEGIN { 
    open STDERR, '>> c:/iisError.log' 
     or die "Can't write to c:/issError.log: $!\n"; 
    binmode STDERR; 
} 

나는이 문제를 가지고 왜 모르겠어요. 그러나 그러한 문제의 근원에 관한 여러 "야생"추측은 위의 코드에 의해 다루어 질 것입니다.

(필자는 Win32에서 파일에 추가하는 소스 코드를 읽은 이후로 오랜 시간이 걸렸지 만, >>> 모드와 binmode는 다른 프로세스의 파일에 쓰기가 충돌을 일으키지 않을 것을 의미합니다. 로그에 중복 텍스트) 제안의

+0

어떤 이유로이 기능이 작동하지 않습니다. 그것은 내가 로그온하도록 요청한 파일을 명확하게 생성하지만 이전 로그 파일로 계속 이동합니다. 나는 인쇄물 STDERR 'foo'를 실행하여 강제로 시도해 봤지만 여전히 이전 파일로 인쇄합니다. –

0

몇 :.

  1. 작업자 프로세스의 ID가 작성중인 디렉토리/파일에 쓰기 권한이 있는지 확인합니다. 내가 아마 전체를주지 않을 것이다 C의 통제 :. 에 서브 디렉토리를 만드십시오.
  2. 이벤트 로그에 쓰기 대신 IIS와 펄 DLL은 C 런타임 라이브러리의 동일한 버전과 연결되어 있는지 확인 에서 Win32 ::은 EventLog
2

확인을 사용하여 파일. depends.exe 또는 dumpbin/dependents를 사용하십시오.

확장하려면 IIS의 FILE * 테이블이 한 위치에 있고 perl DLL이 약간 다른 위치에 있다고 생각할 수 있습니다. perl이 stderr 핸들을 찾으러 갈 때, 랜덤 메모리를 파일 핸들로 취급하여 예측 가능한 결과를 얻습니다.

+0

iis는 어디에 설치되어 있습니까? 나는 아무것도 찾을 수없는 것 같아 ... –

0

업데이트 : 경고에 변수가있는 경우에만이 오류가 발생한다는 것을 발견했습니다. 경고가 일반 텍스트 일 ​​경우 문제가 없습니다. 또한 변수는 비워 둘 수 없으며 비어 있지 않은 변수에 대해 경고를 두 번내어 버그를 치는 것처럼 보입니다.

관련 문제