2010-05-27 3 views
0

IIS 6에서 폭탄을 터뜨린 CGI scipt에서 호출 된 Perl 모듈을 사용하고 있습니다. XP 시스템 (IIS 5.1)의 동일한 폴더 구조가 환상적입니다. 나는 9 번째 줄에서 모듈로드 명령을 제거하면, "로드에 대한"하고 "확인"을 인쇄합니다,하지만 난 때IIS6의 상대 경로에서 Perl 모듈을로드하려면 어떻게해야합니까?

use Language::Guess; 

내가

지정한 CGI 응용 프로그램을받을 실행 완전한 HTTP 헤더 세트를 반환하지 않아서 오작동합니다.

폴더 구조가 입니다 /cgi-bin/test.pl /PerlModules/Language/Guess.pm 나는 파일/폴더 사용 권한을 조정 시도하고 다시 내 IIS 구성 시간을 검토 한

. IIS 컴퓨터의 명령 줄에서 제대로 실행되거나 모듈을 \ Perl \ site \ lib에 복사해도이 스크립트가 예정된 공유 서버에서 모듈을로드 할 수있는 권한이 없습니다. 나는 간단한 것을 놓치고 있습니까?

use lib "C:\\Perl\\PerlModules\\"; 

이든 : 여기

이 문제는 펄 모듈이있는 곳의 전체 경로에

use lib "..\\PerlModules\\"; 

변경 그것에게 선을입니다 test.pl

use strict; 
use CGI ':standard'; 

print header("text/html"); 

use lib "..\\PerlModules\\"; 
print "about to load<br/>"; 
#bombs here 
use Language::Guess; 

print "ok" 
+0

질문을 편집하여 답을하는 것이 이상합니다. –

답변

2

입니다 .

이유는 동일한 디렉토리의 명령 줄에서 실행되는 CGI 스크립트가 정상이지만 다른 디렉토리의 서버에 의한 절대 경로로 실행될 때 ..\\PerlModules\\ 디렉토리는 더 이상 올바른 위치가 아닙니다. 모듈 (왜냐하면 .. 지금은 스크립트의 디렉토리가 아니라 서버의 디렉토리와 관련이 있기 때문입니다). 모듈을로드하려고 시도하면 모듈을 찾을 수 없으며 오류 메시지가 인쇄됩니다. 웹 서버는 오류 메시지에 대처할 수 없으므로 위의 내용을 참조하십시오.

CGI 스크립트에서 절대 경로를 사용하지 않으려면 FindBin 모듈이있는 BEGIN 블록에서 use lib을 사용하여 조사하십시오. 이런 종류의 문제를 완화

한 것은 CGI :: 잉어 모듈과 "fatalsToBrowser"옵션 :

use CGI::Carp 'fatalsToBrowser'; 

어획량 실수 & 브라우저에 그들을 밖으로 던졌습니다. 이것은 디버깅에만 사용됩니다.

+1

CGI :: Carp 모듈의 멋진 팁. 답변 당 최종 코드는 입니다. FindBin을 사용하십시오. lib "$ FindBin :: Bin /../ PerlModules"을 사용하십시오. – Laramie

+0

그것은'BEGIN {};에 있습니다. 그렇지 않습니까? –

관련 문제