在我所有的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文件夹,从一种工作的服务器,以这种机器,但是没有喜悦。

@Hometoast:

我检查了'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() 显然是使用一种替代机制,以确定应该如何产生的临时文件夹。

@Ranguard:

真正的问题是 CGI.pm 模块和附件处理。每当一个文件上传到网站上 CGI.pm 需要存放它的地方暂时的。要做到这 CGITempFile() 被称为内 CGI.pm 分配一个临时文件夹。所以很遗憾我不能使用 File::Temp.谢谢你。

@Chris:

帮助一堆。我有一个快速扫描通过 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和温度下 项/.默认的环境

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top