1台のマシンを除くすべてのWindowsサーバーで、次のコードを実行して一時ファイルフォルダーを割り当てると、次のようになります。
use CGI;
my $tmpfile = new CGITempFile(1);
print "tmpfile='", $tmpfile->as_string(), "'\n";
変数$tmpfile
には値が割り当てられ、'.\CGItemp1'
これが私が望むものです。しかし、私のサーバーの1つでは、が正しく設定されていませんC:\temp\CGItemp1
。
すべてのサーバーは、Windows 2003 Standard Edition、IIS6、およびActivePerl 5.8.8.822を実行しています(Perlの新しいバージョンへのアップグレードはオプションではありません)。コマンドラインから、またはIISでCGIスクリプト(scriptmap .pl
= c:\perl\bin\perl.exe "%s" %s
)としてスクリプトを実行した場合、結果は常に同じです。
.\CGItemp1
このPerlインストールを修正して、デフォルトで''を返すように強制するにはどうすればよいですか?
動作中のサーバーの1つからこのマシンにPerlフォルダー全体をコピーしたこともありますが、喜びはありません。
TMP
' 'と' TEMP
'環境変数をチェックしました。また$ENV{TMP}
、$ENV{TEMP}
それらは同一です。
コマンドラインから、ユーザープロファイルディレクトリを指します。次に例を示します。
C:\DOCUME~1\[USERNAME]\LOCALS~1\Temp\1
IISでCGIスクリプトとして実行すると、どちらも次のことを示します。
c:\windows\temp
レジストリキーHKEY_USERS/.DEFAULT/Environment
では、両方のサーバーに次のものがあります。
%USERPROFILE%\Local Settings\Temp
のActiveState実装はCGITempFile()
、一時フォルダを生成する方法を決定するために、明らかに代替メカニズムを使用しています。
本当の問題は、CGI.pm
モジュールとアタッチメントの処理にあります。ファイルがサイトにアップロードされるときはいつでも、CGI.pm
それを一時的な場所に保存する必要があります。これを行うには、一時フォルダを割り当てるためにCGITempFile()
内で呼び出されます。CGI.pm
残念ながら使用できませんFile::Temp
。とにかくありがとう。
それはたくさんの助けになりました。私は以前にソースをざっとスキャンしましCGI.pm
たが、あなたの提案により、私は戻って、基礎となるアルゴリズムを理解するためにそれをより慎重に見るようになりました。私は物事を動かしましたが、奇妙なことに、元々c:\temp
サーバー上にフォルダーがありませんでした。
一時的な修正を取得するために、c:\temp
フォルダーを作成し、Webサイトの匿名ユーザーアカウントに関連するアクセス許可を設定しました。しかし、これは共有ボックスであるため、一時ファイルが削除されていても、そのままにしておくことはできませんでした。簡単に言うと、フォルダの名前をc:\temp
別の名前に変更すると、魔法のように正しい' .\
'フォルダパスが返されていました。また、顧客がサイトでFrontPage拡張機能を有効にしていることに気付きました。これにより、Webサイトフォルダーの匿名ユーザーアカウントの書き込みアクセスが削除されるため、このアクセス許可を再適用する必要がありました。そのフォルダが存在しなかったのに、なぜこの問題の最初CGITempFile()
に戻ってきたのか、そしてなぜそれが魔法のように再び機能し始めたのかについて、私はまだ途方に暮れています。c:\temp