使用Perl CGI从文本文件读取时如何显示图像?

时间:2016-11-03 15:45:26

标签: perl cgi

Latest Table/Output

这是文本文件中包含图像0001|Yamaha FS700S|Acoustic Guitar|$200.00|<img src=“/cgi-bin/asst5/asst5_img/Yamaha_FS700S.jpg"/>

的第一行

文本文件的源代码是/Applications/XAMPP/xamppfiles/cgi-bin/asst5

这是读取文件并在表格中显示的CGI脚本

use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use strict;
use warnings;
print "Content-type: text/html\n\n";

 print "<TABLE BORDER>\n";
 print "<TR><TH>SKU Code<TH>Name<TH>Description<TH>Price<TH>Photos"; 
open my $order_fh, '<', 'inventory.txt' or die "Error opening file, $!";

while(<$order_fh>) {
  print "<TR>\n";
  print '<TD>' . join('</TD><TD>', split /\|/) . "</TD>\n";
  print "</TR>\n";
}

close $order_fh;
 print "</TABLE>";

更新错误日志:

 [Fri Nov 04 10:09:23.102929 2016] [cgi:error] [pid 3814] [client ::1:50571] 
 AH02811: script not found or unable to stat: /Applications/XAMPP/xamppfiles/cgi-bin/asst5/\xc3\xa2\xe2\x82\xac\xc5\x93, referer: http://localhost/cgi-bin/asst5/showmdse.cgi

1 个答案:

答案 0 :(得分:3)

我不明白为什么人们认为在Stack Overflow问题中发布文本图像是个好主意。如果您有文字,请将其作为文字包含在您的问题中。

您是否查看过Web服务器错误日志?这几乎肯定会给你一个很大的线索来解决这里出了什么问题。但这是我的预感......

您的图像文件位于CGI目录中。您的Web服务器配置为将Web目录中的任何文件视为可执行文件。因此,当您的Web服务器获取CGI目录中的资源请求时,它不仅仅为文件提供服务,而是执行文件并将程序返回的任何内容传递回浏览器。

所以这就是发生的事情。您的用户请求网页。执行CGI程序并将HTML返回给浏览器。该HTML包含图像标记。当浏览器解析HTML时,它会找到图像标记并生成对Web服务器的另一个请求。此请求要求CGI目录中的iamge文件。 Web服务器尝试执行映像文件 - 但这不起作用。因此,Web服务器返回500错误,浏览器显示“损坏的图像”图标。

我敢打赌,如果你查看网络服务器错误日志,你会看到一条关于“未能执行”图像文件的消息。

解决方案是将图像从CGI目录移动到包含静态文件的Web服务器目录中。您还需要调整数据文件中的URL。

我很伤心地看到,你仍然没有改变90年代中期,在HTML程序或切换到使用模板系统。

更新:哦,这里还有另一个潜在的错误(可能会掩盖我上面讨论的错误)。您的图片代码的src属性有误。我敢打赌“/ Applications / XAMPP / xamppfiles / cgi-bin / asst5 / asst5_img”是文件路径而不是URL。我不确定如何配置XAMPP,但我打赌你真正想要的URL是“/ cgi-bin / asst5 / asst5_img”。

这会在错误日志中显示“找不到404文件”错误。

Update2:所以你已经添加了错误日志中的文本,并且正如预测的那样,这是一个“找不到文件”错误(虽然我不完全确定这些十六进制字符的来源从)。