我要读写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文件,请提前感谢任何帮助。
答案 0 :(得分:1)
我们再试一次。
此程序在您的Web服务器上运行。从$cgi->param('xml')
获取的路径是客户端上的路径。客户端路径不太可能存在于服务器上 - 正如您的错误消息所示。
如果您想获取上传文件的位置,可以使用$cgi->tmpFileName($filename)
。
如果您想要在已上传的文件中打开文件句柄,则可以使用$cgi->upload('xml')
。
如果您想要上传的文件的名称,那么您可以使用$cgi->param('xml')
- 但是您需要从该值的开头删除目录路径,因为它对您在服务器上没用。
我在回答your previous question时解释了所有这些。但由于某种原因,你似乎忽略了我以前的答案。我很想知道为什么。