【发布时间】:2011-04-16 06:37:29
【问题描述】:
我正在使用CGI.pm 版本 3.10 使用 Perl 进行文件上传。我有一个上传文件的 Perl 脚本,我的一个应用程序使用签入签出功能跟踪上传文档的不同修订。
再创作步骤:
- 我已经使用我的应用程序(基于 Web 使用 apache)完成了结帐(下载文件)。
- 退出当前用户会话。
- 使用相同的凭据再次登录,然后签入(上传)新文件。
输出:
- 上传成功
- Perl 上传脚本显示正确的上传数据
- 已创建文件的新修订版
输出是正确的和预期的,除了一种情况是问题
问题:
- 新上传的文件内容与数据库中上次上传的修订内容一致。
我正在使用临时文件夹来复制新内容,如果我在上传脚本中打印新内容,那么它是正确的。我对 CGI 上传大小没有限制。似乎在 CGI 环境中的某个地方失败可能是我正在使用的版本。我没有使用污点模式。
任何人都可以帮助我了解可能的原因吗?
【问题讨论】:
-
您应该尝试在某些日志中跟踪文件的内容。你会看到它在哪一步改变了它不应该改变的方式。使用您提供的信息很难理解发生了什么。这水平太高了。请尝试本地化错误并附上导致它的代码。
-
你必须展示一些代码。构建一个展示问题的最小测试用例,以便其他人可以自己重现它。
-
很难理解你的问题。您从数据库中获取文件的最新版本,下载它,在本地修改并重新上传。在那里它被上传到一个临时文件夹。当您尝试将其与数据库加载(或比较?)时,您会意识到临时文件现在具有数据库中文件的内容。这是正确的吗 ?如果是这样,我的猜测是您检查数据库的代码会获取该数据库中的文件并用它替换临时文件。但是根据您的高级描述,很难说出原因。正如 Ivan 建议的那样,您应该在流程的各个步骤中检查您的文件以进行调试。
-
开始正常的调试过程。检查每个步骤的数据,看看发生了什么。
-
感谢所有建议。我将调试并分享结果.. 只是想检查一下 CGI.pm 3.10 是否太旧而无法在 2010 年使用,我应该转向新版本吗?