2012-05-25 142 views
2

我想上傳本地主機服務器上的文件(在Linux平臺上的Apache 2.2),但我得到內部服務器錯誤500通過perl CGI腳本上傳文件

服務器運行正常(因爲我能夠通過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> 

這是一個被放置在那裏我已經給予了充分的權限在此文件/ var/WWW/cgi-bin目錄我的CGI腳本。

#!/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> 

請有人給我一個提示,以解決上述簡單的問題。謝謝。

+3

從[堆棧溢出Perl常見問題](http://stackoverflow.com/questions/tagged/perl?sort=faq):[我如何解決我的Perl CGI腳本?](http://stackoverflow.com/questions/2165022/how-can-i-troubleshoot-my-perl-cgi-script) – daxim

回答

0

檢查apache錯誤日誌(通常位於/ var/log/httpd/error_log中)以獲取警告或錯誤消息。我懷疑問題是Web服務器上傳的目錄不是writable

0

print「Content-type:text/html \ n \ n」; 這是一個內容類型的頭文件,它告訴接收的網頁瀏覽器它將接收什麼類型的數據 - 在本例中是HTML文件。如果您忘記包含它,或者在打印此標題前打印了其他內容,則當您嘗試訪問CGI程序時,您將收到「內部服務器錯誤」

END_HTML在EOF處也丟失。

+0

要查看發生了什麼錯誤,請檢查您的apache錯誤日誌。根據安裝,它可能在'/ var/log/apache2 /'中 –