当前位置:  开发笔记 > 编程语言 > 正文

CGI.pm通常在哪里创建临时文件?

如何解决《CGI.pm通常在哪里创建临时文件?》经验,为你挑选了1个好方法。

在我的所有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,即使那个文件夹不存在,为什么它神奇地再次开始工作.



1> ChrisN..:

临时目录的名称保存在CGI.pm $CGITempFile::TMPDIRECTORY中的find_tempdir函数中并初始化.CGI.pm文档(搜索-private_tempfiles)中描述了选择临时目录的算法.IIUC,如果服务器上存在C:\ Temp文件夹,CGI.pm将使用它.如果没有签入的目录find_tempdir存在,则当前目录"." 用来.

我希望这有帮助.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有