На всех моих серверах 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 (где scriptmap .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
При запуске под IIS в качестве CGI-скрипта они оба указывают на:
c:\windows\temp
В разделе реестра HKEY_USERS/.DEFAULT/Environment
оба сервера имеют:
%USERPROFILE%\Local Settings\Temp
В реализации ActiveState CGITempFile()
явно используется альтернативный механизм определения способа создания временной папки.
@ Ranguard:
Настоящая проблема связана с модулем CGI.pm
и обработкой вложений. Всякий раз, когда файл загружается на сайт, CGI.pm
необходимо хранить его где-то временно. Для этого CGITempFile()
вызывается в CGI.pm
для выделения временной папки. К сожалению, я не могу использовать File::Temp
. В любом случае, спасибо.
@ Крис:
Это помогло куче. Раньше у меня было быстрое сканирование источника CGI.pm
, но ваше предложение заставило меня вернуться и более внимательно изучить его, чтобы понять основной алгоритм. У меня все работает, но самое странное, что на сервере изначально не было папки c:\temp
.
Чтобы получить временное исправление, я создал папку c:\temp
и установил соответствующие разрешения для учетной записи анонимного пользователя на сайте. Но так как это общий ящик, я не мог оставить все как есть, даже если временные файлы были удалены. Короче говоря, я переименовал папку c:\temp
во что-то другое, и волшебным образом был возвращен правильный путь к папке .\
. Я также заметил, что заказчик включил расширения FrontPage на сайте, что исключает доступ на запись для учетной записи анонимного пользователя в папках сайта, поэтому это разрешение необходимо повторно применить. Я все еще не знаю, почему в начале этой проблемы CGITempFile()
возвращал c:\temp
, хотя эта папка не существовала, и почему она волшебным образом снова заработала.