【问题标题】:Read and Write the file in cgi perl script using xampp apache server? [duplicate]使用xampp apache服务器在cgi perl脚本中读写文件? [复制]
【发布时间】:2014-10-13 08:32:13
【问题描述】:

我将读取和写入 xml 文件。 我使用下面的 html 代码上传 xml 文件。 如果我将 xml 文件放在 cgi-bin 文件夹中,它将执行并显示

 #!"C:\xampp\perl\bin\perl.exe"
     use strict;
use warnings;
use CGI;

my $cgi = new CGI;
print $cgi->header( "text/html" );

print <<END_HERE;
<html>
  <head>
    <title>My First CGI Script</title>
  </head>
  <body bgcolor="#FFFFCC">
    <p>Welcome to Perl CGI</p>

    <form action="/cgi-bin/inputxml.cgi" method="post"
    enctype="multipart/form-data">
    <p>Files to Upload: <input type="file" name="xml" /></p>
    <p><input type="submit" name="Submit" value="Submit Form" /></p>
    </form>
  </body>
</html>
END_HERE

但是如果我将 xml 文件放在任何其他文件夹或驱动器中(cgi-bin 文件夹除外),它会显示 Can't open data at C:/xampp/cgi-bin/inputxml.cgi

#!"C:\xampp\perl\bin\perl.exe"
            use strict;
            use CGI;
            use Cwd 'abs_path';
            use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
            use File::Basename;
            $CGI::POST_MAX;
            my $safe_filename_characters = "a-zA-Z0-9_.-";
            my $cgi = new CGI;
            print $cgi->header ( );
            my $file = $cgi->param('xml');
            my $lines;
            open(DATA,"<$file") or die "Can't open data $!";
            $lines = <DATA>;
            close(DATA);
            print $lines;    
            print abs_path($file);
            open(OUT, '>dirname($file)."\\out_".basename($file)');
            print OUT $lines;
            close(OUT);   
        print <<END_HERE;

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Thanks!</title>
    <style type="text/css">
    img {border: none;}
    </style>
    </head>
    <body>
    <p>Thanks for uploading your file!</p>
    </body>
</html>
END_HERE

print "Welcome Come Again";

我想在没有 cgi-bin 文件夹的任何文件夹或驱动器中执行 xml 文件,请任何人帮助,在此先感谢。

【问题讨论】:

标签: apache perl xampp cgi


【解决方案1】:

让我们再试一次。

此程序在您的网络服务器上运行。您从$cgi-&gt;param('xml') 获得的路径是客户端上的路径。客户端路径极不可能存在于服务器上 - 正如您的错误消息所示。

如果要获取上传文件的位置,可以使用$cgi-&gt;tmpFileName($filename)

如果您想要一个已在上传文件上打开的文件句柄,您可以使用$cgi-&gt;upload('xml')

如果您想要上传文件的名称,则可以使用$cgi-&gt;param('xml') - 但您需要从该值的开头删除目录路径,因为它在服务器上对您无用。

我在回复your previous question 时解释了所有这些。但是由于某种原因,您似乎忽略了我之前的回答。我很想知道为什么。

【讨论】:

  • 它工作得很好@Dave。我想要xml文件的目录路径。因为我想将输出 xml 写入获取该 xml 文件的同一位置。我使用这个 open $local_out_fh, '>', "$local_fn" or die $!;但文件只写在 cgi-bin 文件夹中。
  • 如果您还有其他问题,那么最好开始新的讨论。
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 2014-12-14
  • 1970-01-01
  • 2015-03-11
  • 2012-08-26
  • 2017-12-23
  • 2019-05-14
相关资源
最近更新 更多