【问题标题】:A perl/cgi script for uploading files用于上传文件的 perl/cgi 脚本
【发布时间】:2014-02-01 03:25:02
【问题描述】:

我已尝试运行此脚本:http://www.seaglass.com/file-upload-pl.html。在阿帕奇。因为我运行的是win7 x64,所以我修改了脚本,所以它是: #! C:\Perl64\bin\perl.exe -wT 而不仅仅是 #! /usr/bin/perl 该页面运行顺利,但任何上传尝试都失败并出现Can't open /tmp/outfile for writing - No such file or directory 错误。 我创建了一个/tmp/outfile 目录和一个/tmp/outfile.txt 文件。 我对 Perl 真的很陌生,因此不知道可能出了什么问题。 请指教。

【问题讨论】:

  • 是的,问一个不同的问题,但在这里发布一个链接。如果我不去,其他人会。

标签: perl apache cgi


【解决方案1】:

/tmp/outfile 是输出文件名,而不是目录名。创建 C:\tmp,但如果您确实也创建了该目录,请删除 C:\tmp\outfile。

【讨论】:

    【解决方案2】:

    Unix 路径组件使用正斜杠而不是反斜杠分隔,驱动器无法在路径中明确显示。 Perl 可以将/ 处理为Windows 上的路径分隔符,将C: 处理为文件系统根目录。 (谢谢,jimtut!) 因此,Unix 路径 /tmp/outfile 在 Windows 上转换为 C:\tmp\outfile。它是(可能不存在的)文件的路径,上传的内容应该存储在该文件中。

    如果您想真正确定代码的可移植性,请使用 File::Spec 模块来构建路径。它允许避免显式写入路径分隔符(Unix 上为/,Windows 上为\)。

    使用 Windows 样式的路径时,请记住在将 \ 写入双引号字符串时将其加倍。 ("C:\\tmp\\outfile") 转义问题和shell、PHP等很多语言一样……

    【讨论】:

    • /tmp/outfile 将在 Windows 上正常工作,假设您有 C:\tmp(或您的 CGI 运行的任何驱动器号)。
    • 实际上,将/tmp/outfile 更改为C:\UniServer\tmp\outfile 会使脚本完全崩溃。
    • @Chiffa 当 Apache 给出 500 时,请始终查看服务器错误日志。它应该会告诉您问题出在哪里。
    • @Palec,抱歉,我是 Perl 新手,不知道 `\` 问题。我认为你的建议最终会奏效。
    猜你喜欢
    • 2012-05-31
    • 2023-03-17
    • 2013-10-26
    • 2013-09-04
    • 2014-02-24
    • 1970-01-01
    • 2011-10-05
    • 2012-01-03
    • 2012-03-10
    相关资源
    最近更新 更多