我是一個Perl新手。我試圖根據以前的作品和書籍如Learning Perl和Modern Perl來學習。我試圖更新這個腳本來解釋HTML表單中的數據並將其寫入文本文件,因爲我們的實驗室有興趣重新啓動並運行它。最初的腳本是爲在Linux服務器上使用而編寫的,但我們之後從Linux切換到Windows服務器。我的平面文件文本文件的路徑是否錯誤?從Linux到Windows服務器
我沒有管理員權限來查看錯誤消息的服務器是具有ActivePerl的Windows服務器。我很難搞清楚Windows的等價路徑,告訴Perl腳本在哪裏寫信息。從談話到管理員看來,我們的內部網映射到E:
驅動器上,雖然這可能不是致命錯誤。
當我嘗試運行數據後,瀏覽器這個腳本在表單上輸入了它只是返回一個通用:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.
任何提示,文檔,教程讚賞。謝謝。
#!C:\perl\bin\perl.exe -w -t
# Good programming practice dictates...
use strict;
use warnings;
# CGI.pm -- makes life easy
#Carp qw(fatalsToBrowser); outputs the error messages to the browser since there is no terminal to output error messages to. Should be removed before script is used in production.
use CGI::Carp qw(fatalsToBrowser) or die "Problems loading CGI.pm";
# Initialize the CGI Interface
my($cgi) = new CGI;
# Print the Header
print $cgi->header();
#The dbmopen call is now de-appreciated. IE: it no longer works
#Kept for archival reasons
#if (! dbmopen(%DB, "/vol/research/docs/old_site_files/eyesignup/data/eyesignup_NEW.dat", 0666))
# {
# print "Error -- Cannot open database.\n";
# exit;
# }
# Tie is the correct way to do it now. But first we are going to experiment with writing to a flat .txt file.
open (Datastore, '>>',"E:/intranet/sds/research/docs/data.txt") or die "Can't open file: $!";
# Store variables and increment access count for this user
# So param('VARIABLE') is the name of the variables used in the HTML form while $custVARIABLE is the input for the database
my($custFirst) = $cgi->param('firstname');
my($custLast) = $cgi->param('lastname');
my($custGender) = $cgi->param('gender');
my($custAge) = $cgi->param('age');
my($custDiv) = $cgi->param('division');
my($custPhone) = $cgi->param('phone');
my($custEmail) = $cgi->param('email');
my($custEmployee) = $cgi->param('employee');
my($custInternet) = $cgi->param('internet');
my($custwww) = $cgi->param('www');
my($custDemographic) = $cgi->param('demographic');
my($custProjects) = $cgi->param('projectsworked');
my($custExperience) = $cgi->param('experience');
my($custWeekdays) = $cgi->param('Weekdays');
#Kept for archival reasons
#my($custName) = $cgi->param('name');
#my($custGender) = $cgi->param('gender');
#my($custDiv) = $cgi->param('division');
#my($custPhone) = $cgi->param('phone');
#my($custEmail) = $cgi->param('email');
#my($custInternet) = $cgi->param('internet');
#my($custwww) = $cgi->param('www');
#my($custDemographic) = $cgi->param('demographic');
#my($custExperience) = $cgi->param('experience');
#my($custTimes) = $cgi->param('times');
#my($custStudies) = $cgi->param('studies');
#$custTimes =~ s/\r\n/~/g;
#This takes the input and places it into an array, starting with the individual's
@InfoDB = $custFirst."|".$custLast."|".$custGender."|".$custAge."|".$custDiv."|".$custPhone."|".$custEmail."|".$custEmployee."|".$custInternet."|".$custwww."|".$custDemographic."|".$custProjects."|".$custExperience."|".$custWeekdays;
print Datastore (@InfoDB);
print "\n";
#Kept for archivival reasons.
#$DB{$custName} = $custGender."|".$custDiv."|".$custPhone."|".$custEmail."|".$custInternet."|".$custwww."|".$custDemographic."|".$custExperience."|".$custTimes."|".$custStudies;
#Kept for archival reasons. dbmclose is de-appreciated
#dbmclose(%DB);
#Instead use untie. But first we're just going experiment with using a flat storage system.
#untie(%DB);
close (Datastore) or die;
#Now inform the person their data has been saved. This is terribly ancient code so I haven't gotten around to fixing this part yet.
print "Content-type: text/html\n\n";
print "<HTML>
<HEAD>
<TITLE>Thank you!</TITLE>
</HEAD>
<BODY>";
print "<H1><U>Thank You ".$custFirst."\!</U></H1>
<P>We appreciate your assistance.</P>
<HR width=\"75%\">";
print "<P><H3>The following information has been recorded:</H3>
Name: <I>".$custFirst."</I></p><P>
Gender: <i>".$custGender."</i></p><p>
Division: <i>".$custDiv."</i></p><p>
Phone: <i>".$custPhone."</i></p><p>
Email: <i>".$custEmail."</I></p><P>
How often do you use the internet?: <i>".$custInternet."</i></p><p>
How often do you visit the website?: <i>".$custwww."</i></p><p>
Are you familiar with demographic data?: <i>".$custDemographic."</i></p><p>
Do you have work experience in economics, business, or a related field?: <i>".$custExperience."</i></p><p>
Weekdays that you are available: <i>".$custWeekdays."</i></p><p>
";
print "
</BODY>
</HTML>";
我做了一些修改,以彌補一些我在工作的限制。例如,暫時輸出錯誤到瀏覽器,直到我得到這個工作。並從舊的dbmopen
調用(不再有效)調用到平面文件存儲。
謝謝,我將使用Strawberry Perl的可移植版本來測試我的腳本。這應該沒問題,因爲它不需要管理員權限來安裝。我的情況有點奇怪,因爲我從來沒有被僱用過這樣做(因此我的能力有限,並且能夠訪問諸如錯誤日誌之類的東西)。這只是我必須扭轉自己作爲額外工作責任的其中一件事。謝謝! – OneBigNewbie 2011-04-11 13:09:49