На всех моих серверов Windows, за исключением одной машины, когда я выполнить следующий код, чтобы выделить временную папку файлы:Где CGI.pm обычно создает временные файлы?
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 с одного из рабочих серверов на эту машину, но без радости.
Я проверил '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
и установил соответствующие разрешения для учетной записи анонимного пользователя. Но поскольку это общий ящик, я не мог оставить что-то в этом роде, хотя временные файлы удалялись. Чтобы сократить длинный рассказ, я переименовал папку c:\temp
в нечто другое и волшебное, вернулось правильное «путь к папке« ». Я также заметил, что клиент включил расширения FrontPage на сайте, что удаляет доступ для записи для анонимной учетной записи пользователя в папках веб-сайта, поэтому это разрешение необходимо повторно применить. Я все еще не понимаю, почему в начале этой проблемы CGITempFile()
возвращал c:\temp
, хотя этой папки не было и почему она волшебным образом начала работать снова.