2

我正在尝试在 localhost 服务器(Linux 平台上的 Apache 2.2)上上传文件,但我收到Internal Server Error 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>

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

4

2 回答 2

0

检查 apache 错误日志(通常在 /var/log/httpd/error_log 中找到)中的警告或错误消息。我怀疑问题是上传目录不可被网络服务器写入。

于 2012-05-25T08:13:01.090 回答
0

print "内容类型:text/html\n\n"; 这是一个内容类型的标头,它告诉接收 Web 浏览器它将接收什么样的数据——在本例中,是一个 HTML 文档。如果您忘记包含它,或者如果您在打印此标题之前打印了其他内容,当您尝试访问 CGI 程序时,您将收到“内部服务器错误” 。

EOF 处也缺少 END_HTML。

于 2013-04-07T11:39:15.053 回答