【问题标题】:A Perl /CGI script to accept different upload files [closed]接受不同上传文件的 Perl /CGI 脚本 [关闭]
【发布时间】:2014-02-24 15:08:59
【问题描述】:

与此有关--https://stackoverflow.com/questions/21487257/a-perl-cgi-script-for-uploading-files--问题,我还有一个问题:可以这样: http://www.seaglass.com/file-upload-pl.html 修改脚本,使其接受不同的输入文件并将它们保存为不同的输出文件,而不仅仅是覆盖单个output 文件? 我是 Perl/CGI 的新手,所以我看不到明显的答案。

【问题讨论】:

  • 不知道为什么它处于暂停状态。这与操作员的另一个线程有关,但差异足以保证一个单独的问题。我想如果您不阅读第一个线程,那么这里可能没有足够的信息作为一个独立的问题。但是,该操作仍在寻找一些学习 Perl/CGI 的简单帮助,我希望我们能提供帮助。
  • @jimtut 我完全明白了。我只是在猜测 OP 想要做什么,同时提到了我的解决方案的局限性。这也是“为我做我的工作”类型的问题,表明没有努力解决问题。未来访客的收益也非常低。关闭的两个原因,一个是反对票。不是一个好成绩。我认为我们提供了帮助,但这个问题需要先解决,然后才值得重新讨论。
  • 我想知道一个简单的方法。很明显,我应该做研究并学习更多 Perl。

标签: perl file-upload cgi


【解决方案1】:

$basename 中,您已经有了文件名。您不必将上传的文件写入/tmp/outfile;您可以动态构建路径,具体取决于$basename

创建要放置文件的目录。我认为它仍然是C:\tmp。而不是

open(OUTFILE, ">/tmp/outfile")

open(OUTFILE, ">/tmp/$basename")

它应该可以工作。甚至在创建$basename 之前,从GetBasename() 内部的$upfile 中删除了污点。但这仍然不安全。在将其提供给open() 之前,您应该从文件名中删除所有不需要的字符,例如

$basename =~ s/[^A-Za-z0-9_.-]//g;
$basename =~ s/^[^A-Za-z0-9]*//;

如果$basename 现在为空,则必须以其他方式选择名称。此外,如果同名文件已经存在,您必须选择是要覆盖它还是组成一个唯一的名称。我当前的解决方案只是覆盖。

如果您想了解更多关于正则表达式的信息,请查看perlre 手册页。

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 2023-03-17
    • 2013-09-04
    • 2016-03-17
    • 2013-10-26
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多