2010-07-02 2 views
3

다른 HTML을 임의로 내보내는 Perl CGI 스크립트가 있습니다. 입력 값이 변경되지 않습니다. 예 : wget을 두 번 실행하고 두 가지 결과를 얻습니다. CGI는 변경되지 않는 개발 데이터베이스에 의해 지원됩니다.Perl CGI 스크립트는 실행에 따라 다른 결과를 반환합니다.

동일한 수의 요소가 DB에서 스크립트로 반환된다는 디버그 문이 있습니다.

솔직히, 나는 신비화되었습니다. 논리, DB 및 입력은 변경되지 않지만 출력은 변경되지 않습니다.

http 서버는 Ubuntu 10.04에서 apache2입니다. Perl 버전은 perl 5.10입니다.

편집 : 서버의 명령 줄에서 실행할 때마다 출력이 정확합니다.

edit2 : 일부 잘못된 실행은 이전 버전의 스크립트처럼 보입니다. do not do 아파치는 캐시가 CGI이지만, 오래된 캐시 버전을 잡아낼 수있는 것처럼 보입니다 ....

+2

검토 할 코드가 없으면 아무도 문제가 무엇인지 알 수 없습니다. –

+0

여기서 코드의 어느 부분이 중요 할 지 모르겠습니다. 코드 전체를 덤프 할 수는 없습니다. –

+1

당신은'$ [= rand']를 당신의 코드에서 어디에도 가지지 않고 있습니다. –

답변

2

CGI 스크립트가 Apache의 표준 CGI API를 사용하여 실행되고 있습니까? 아파치 :: 레지스트리 (또는 아파치 2의 ModPerl :: Registry)를 사용하는 mod_perl에서 CGI 에뮬레이션 레이어를 사용할 수 있습니까?

mod_perl의 CGI 에뮬레이션이 작동하는 방식에서 비롯된 것과 비슷한 효과를 보았습니다. 세부 사항은 discussed here입니다.

한 가지 해결 방법은 스크립트 시작 부분에 선언 된 '전역 변수'를 '내'로 사용하고 키워드 '내'를 '우리'로 변경하는 것입니다.

물론 문제는 완전히 다른 것일 수 있습니다. 더 이상의 정보 없이는 말하기가 매우 어렵습니다.

+0

Hmmmmmm. 나는 링크가 묘사하는 데이터와 관련하여 거기서 진행되는 이상한 상호 간담을 할 수도있다. 잠시 동안 mod_perl (그냥 일반 CGI 스크립트)을 비활성화하고 작동하는지 확인합니다. –

0

캐싱 : 아파치는 아마도 캐싱하지 않지만 브라우저는 아마도 캐싱하지 않을 수 있습니다. 캐싱을 끄십시오 (브라우저 캐쉬를 0MB로 설정하십시오).

명령 줄 : 출력 결과가 웹 페이지와 스크립트의 CLI 실행이 다른 경우 헤더 정보가 누락되었거나 HTML 태그가 완전하지 않거나 깨지지 않은 것처럼 보입니다. 예를 들어, 두 개의 개행 문자가있는 Content-Type 문이 필요합니다.

CLI에서 작동하지만 웹 서버에서 CGI를 통해 작동하는 경우 코드, Apache에 누락 된 모듈 또는 이와 비슷한 것이어야합니다.

관련 문제