使用xampp apache服务器在cgi perl脚本中读写文件?

时间:2014-08-20 05:02:32

标签: apache perl xampp cgi

我要读写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文件夹除外)中,它显示无法在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文件,请提前感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我们再试一次。

此程序在您的Web服务器上运行。从$cgi->param('xml')获取的路径是客户端上的路径。客户端路径不太可能存在于服务器上 - 正如您的错误消息所示。

如果您想获取上传文件的位置,可以使用$cgi->tmpFileName($filename)

如果您想要在已上传的文件中打开文件句柄,则可以使用$cgi->upload('xml')

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

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