2008-09-17 5 views
2

、私は一時ファイルフォルダを割り当てるために、次のコードを実行する1台のマシンを除い:通常、CGI.pmは一時ファイルをどこに作成しますか?すべての私のWindowsサーバーの

use CGI; 
my $tmpfile = new CGITempFile(1); 
print "tmpfile='", $tmpfile->as_string(), "'\n"; 

変数​​は値'.\CGItemp1'を割り当てられ、これは私が欲しいものです。しかし、私のサーバーの1台で、それは間違って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フォルダ全体をこのサーバにコピーしていますが、喜んではいません。

@Hometoast:

私は 'TMP' と 'TEMPの環境変数とも$ENV{TMP}$ENV{TEMP}をチェックし、彼らは同じです。彼らは、たとえば、ユーザープロファイルディレクトリを指すコマンドラインから

C:\DOCUME~1\[USERNAME]\LOCALS~1\Temp\1

にCGIスクリプト彼らの両方の点としてIISの下で実行c:\windows\temp

レジストリキー HKEY_USERS/.DEFAULT/Environmentで0

は、両方のサーバーがあります。CGITempFile()のActiveStateの実装は明確にそれが一時的なフォルダを生成する方法を決定するための代替メカニズムを使用している

%USERPROFILE%\Local Settings\Temp

@Ranguard:

本当の問題はCGI.pmモジュールと添付ファイルの処理です。ファイルがサイトにアップロードされるたびに、CGI.pmは一時的にそれをどこかに格納する必要があります。これを行うには、がCGI.pmの中で呼び出され、一時フォルダが割り当てられます。残念ながらFile::Tempは使用できません。とにかくありがとう。束を助けた

@Chris:

。先にCGI.pmソースを使って簡単にスキャンしましたが、あなたの提案は元のアルゴリズムを理解するためにもっと慎重に見直してくれました。私は問題なく動作しますが、奇妙なことはもともとサーバ上にc:\tempというフォルダがなかったことです。

私はc:\tempフォルダを作成し、ウェブサイトの匿名ユーザーアカウントに関連する権限を設定し、一時的な修正プログラムを入手するには。しかし、これは共有されたボックスなので、一時ファイルが削除されているにもかかわらず、私はそのように物事を残すことができませんでした。短いストーリーを短縮するために、c:\tempフォルダの名前を別のものに変更し、正しい '.\'フォルダパスが返されていたのを魔法のように覚えています。また、顧客がWebサイトのFrontPage拡張機能を有効にしていて、Webサイトフォルダの匿名ユーザーアカウントの書き込みアクセス権が削除されたため、このアクセス許可を再度適用する必要があることに気付きました。私はまだこの問題の冒頭でが、そのフォルダが存在しなかったのに、なぜ魔法のように再び働き始めたとしても、c:\tempを返していたのはなぜか分かりません。あなたは、このスクリプトを実行している場合

答えて

8

のレジストリの値をチェックし、実行された場合。 一時ディレクトリを選択するアルゴリズムについては、CGI.pmのドキュメント(-private_tempfilesを検索してください)に記載されています。 IIUCでは、C:\ Tempフォルダがサーバー上に存在する場合、CGI.pmがそれを使用します。 find_tempdirでチェックされたディレクトリが存在しない場合、現在のディレクトリ "。"使用されている。

こちらがお役に立てば幸いです。

1

は、それが異なる場合かどうかを確認するために%TEMP%環境変数を確認してください。

IISは、一時ディレクトリの名前は$CGITempFile::TMPDIRECTORYで開催されたとCGI.pmでfind_tempdir機能に初期化される HKEY_USERS/.DEFAULT /環境下TMPとTEMPのため

2

ないあなたの質問に直接答えていますが、File::Tempを使用してみましたが?

これは、どのOSでも動作するように特別に設計されています。

関連する問題