通过perl CGI脚本上传文件

时间:2012-05-25 06:47:55

标签: perl apache file-upload cgi

我正在尝试在localhost服务器上上传文件(Linux平台上的Apache 2.2),但我收到内部服务器错误500

服务器运行正常(因为我能够通过CGI脚本打印所有环境变量),即使经过大量的谷歌搜索,我也无法找到自己的方式。

这是我的HTML代码:

<FORM ACTION="http://localhost/cgi-bin/upload.cgi" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="photo">
<INPUT TYPE="submit" NAME="Submit" VALUE="Submit Form">
</FORM>

这是我的cgi脚本,它放在/ var / www / cgi-bin,我已经给了这个文件的完全权限。

#!/usr/bin/perl -w
use CGI;

$upload_dir = "/home/myuser/Desktop/upload";
$query = new CGI;
$filename = $query->param("photo");
$filename =~ s/.*[\/\\](.*)/$1/;
$upload_filehandle = $query->upload("photo");

open UPLOADFILE, ">$upload_dir/$filename";
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;

print $query->header ();

print <<END_HTML;
<HTML>
<HEAD>
<TITLE>Thanks!</TITLE>
</HEAD>
<BODY>
<P>Thanks for uploading your photo!</P>
    <P>Your photo:</P>
<img src="/home/myuser/Desktop/upload/$filename" border="0">
</BODY>
</HTML>

请有人给我一个解决上述简单问题的提示。感谢。

2 个答案:

答案 0 :(得分:0)

检查apache错误日志(通常位于/ var / log / httpd / error_log中)以获取警告或错误消息。我怀疑问题是Web服务器上传目录不是writable

答案 1 :(得分:0)

打印“内容类型:text / html \ n \ n”; 这是一个内容类型的标题,它告诉接收Web浏览器它将接收哪种数据 - 在这种情况下,是一个HTML文档。如果您忘记包含它,或者在打印此标题之前打印其他内容,则在尝试访问CGI程序时会出现“内部服务器错误”

在EOF中也缺少END_HTML。