题
在我所有的Windows服务器,除了一个机,当我执行以下代码分配的临时文件,文件夹:
use CGI;
my $tmpfile = new CGITempFile(1);
print "tmpfile='", $tmpfile->as_string(), "'\n";
变量 $tmpfile
分配的价值 '.\CGItemp1'
这就是我想要的。但在我的一个服务器,这是不正确地设定为 C:\temp\CGItemp1
.
所有的服务器运行Windows2003标准版,IIS6和ActivePerl5.8.8.822(升级到新版本的Perl不是一个选项)。结果总是相同时运行的一个脚本从命令行或在IIS作为CGI script(其中脚本映射配置 .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 script他们两点:
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
, 即使那个文件夹不存在,以及为什么它奇迹般地开始工作。
解决方案
该名临时目录是开举行 $CGITempFile::TMPDIRECTORY
并且在初始化 find_tempdir
功能在CGI。pm。算法选择的临时目录中的描述CGI。pm文件(搜索 -private_tempfiles).IIUC,如果一个C: emp 文件夹中存在服务器上,CGI。下午将使用它。如果没有目录的检查中 find_tempdir
存在,那么目前的目录"."使用。
我希望这有所帮助。
其他提示
不直接回答你的问题,但是你有没有尝试过使用 文件:温度?
它是专门设计工作,在任何操作系统。
如果你正在运行这个脚本,正如你,检查%TEMP%环境变量来看,如果如果它不同之处。
如果IIS执行,检查的价值在登记册中为TMP和温度下 项/.默认的环境