은 :일반적으로 CGI.pm은 임시 파일을 어디에 생성합니까? 나는 다음과 같은 코드는 임시 파일 폴더에 할당 실행할 때 하나의 시스템을 제외한 모든 내 Windows 서버에서
use CGI;
my $tmpfile = new CGITempFile(1);
print "tmpfile='", $tmpfile->as_string(), "'\n";
변수 $tmpfile
을 값 '.\CGItemp1'
을 할당이 제가 원하는 것입니다. 하지만 내 서버 중 하나에서 잘못 설정했습니다 C:\temp\CGItemp1
.
모든 서버에서 Windows 2003 Standard Edition, IIS6 및 ActivePerl 5.8.8.822 (Perl의 최신 버전으로 업그레이드하는 것은 옵션이 아닙니다)가 실행되고 있습니다. 결과는 명령 줄 또는 IIS에서 CGI 스크립트 (여기서 스크립트 맵 .pl
= c:\perl\bin\perl.exe "%s" %s
)로 스크립트를 실행할 때 항상 동일합니다.
이 Perl 설치를 어떻게 해결하고 강제로 '.\CGItemp1
'을 반환 할 수 있습니까?
전 Perl 폴더 전체를이 서버에서이 컴퓨터로 복사했지만 기쁨은 없습니다.
은 내가 'TMP
'와 '
TEMP
'환경 변수도
$ENV{TMP}
및
$ENV{TEMP}
을 확인하고는 동일입니다.
명령 줄에서
그들은 예를 들어, 사용자 프로파일 디렉토리를 가리 키 :
레지스트리 키: CGI 스크립트 둘 점으로 IIS에서 실행
C:\DOCUME~1\[USERNAME]\LOCALS~1\Temp\1
c:\windows\temp
HKEY_USERS/.DEFAULT/Environment
0
는 두 서버가 있습니다 CGITempFile()
의 ActiveState의 구현이 명확하게 임시 폴더를 생성하는 방법을 결정하기 위해 다른 메커니즘을 사용
%USERPROFILE%\Local Settings\Temp
.
진짜 문제는 CGI.pm
모듈 및 부착 처리로이다. 파일이 사이트에 업로드 될 때마다 CGI.pm
은 임시 어딘가에 저장해야합니다. 이렇게하려면 CGITempFile()
이 CGI.pm
내에서 호출되어 임시 폴더를 할당하십시오. 불행히도 File::Temp
을 사용할 수 없습니다. 어쨌든 고마워. 무리 도움
CGI.pm
소스를 통해 빠른 스캔을했지만 귀하의 제안으로 돌아가서 기본 알고리즘을 이해하기 위해 좀 더 신중하게 검토했습니다. 이상한 점은 원래 서버에
c:\temp
폴더가 없었기 때문입니다.
임시 수정본을 얻으려면 c:\temp
폴더를 만들고 웹 사이트의 익명 사용자 계정에 대한 관련 권한을 설정하십시오. 하지만 이것은 공유 된 상자이기 때문에 임시 파일이 삭제 되더라도 그런 식으로 남겨 둘 수는 없습니다. 긴 이야기를 짧게 줄이기 위해 c:\temp
폴더의 이름을 다른 것으로 바꿨으며 마술로 올바른 '.\
'폴더 경로가 반환되었습니다. 또한 고객이 웹 사이트 폴더의 익명 사용자 계정에 대한 쓰기 권한을 제거하는 사이트의 FrontPage 확장을 사용하도록 설정 했으므로이 권한을 다시 적용해야했습니다. 나는이 문제의 시작 부분에서 왜 이 그 폴더가 존재하지 않았고 마술처럼 다시 작업하기 시작 했음에도 불구하고 c:\temp
을 반환하는 이유에 대해 여전히 분실하고 있습니다.