我在Windows平台上的IIS6服务器上运行了我的网页.pl(perl)文件。我的页面允许用户上传excel并在处理下载后显示具有相同文件的链接。该页面有90%的时间工作,在某些随机情况下,无法返回带有链接的页面,尽管我的代码按照我的日志文件到达代码中的那一点,并且我的输出文件可用。
AppPage.pl
use strict;
use CGI qw(:standard);
use CGI::Carp('fatalsToBrowser');
use Spreadsheet::ParseExcel::SaveParser;
print header();
print start_multipart_form();
if(param('Submit')){
if(param('file_upl')){
Display_File();
}
}else{
Display_Main();
}
sub Display_Main(){
print "Please upload file for processing";
print filefield(-name=>"file_upl",-accept=>'application/vnd.ms-excel') ;
print submit(-name=>"Submit");
}
sub Display_File{
my $fh = upload('upload_file');
if(!$fh){
print "file too big". $cgi_error();
exit 0;
}else{
open (OUTFILE, ">> $file_path") or die("Can't open/create $file_name".$!);
binmode OUTFILE;
while(<$fh>){
print OUTFILE;
}
close OUTFILE;
}
my $out_file = Read_Write_excel(); #Saves file in a folder on server
print "Thank you. Dowload";
print "<a href=file://///server/share/dir/$out_file>here</a>";
}
sub Read_Write_excel{
my $out_file = 'C:\OUT_File.xls'
my $parser = new Spreadsheet::ParseExcel::SaveParser;
my $Book = $parser->Parse($file_path);
my $Sheet = $Book->worksheet('Data');
my ($first_row,$last_row) = $Sheet->row_range();
my $key_col = 0;
my $id;
for(my $row=1;$row<=$last_row;$row++){
$id = $Sheet->get_cell($row,$key_col)->value();
if($id){
$col = $col++;
$Sheet->AddCell($row,$col,'Id found');
}
else{
$col = $col++;
$Sheet->AddCell($row,$col,'Id Not found');
}
}
$Book->SaveAs($out_file);
return $out_file;
}
更新:这是我的基本代码的简化版本。请让我知道任何建议。
尝试调试选项: 1.检查IIS日志文件以查找HTTP错误代码或错误消息。什么都没找到。 2.在这种情况下,使用fiddler获取HTTP响应代码,即使页面出现故障,仍然只能看到200。 3.使用IIS服务器端的日志分析器来捕获http代码。也没有。
欣赏任何指示。
由于