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

如何在使用Perl CGI读取文本文件时显示图像?,perl,cgi,Perl,Cgi,这是包含图像0001 |雅马哈FS700S |原声吉他|$200.00 | 文本文件的源代码是/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 "<TAB

这是包含图像
0001 |雅马哈FS700S |原声吉他|$200.00 |

文本文件的源代码是
/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>";

我不明白为什么人们认为在堆栈溢出问题中发布文本图像是个好主意。如果你有文本,那么把它作为文本包含在你的问题中

您查看过web服务器错误日志吗?这几乎肯定会给你一个很大的线索,告诉你这里到底出了什么问题。但这是我的直觉

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

下面是发生的情况。您的用户请求该网页。执行CGI程序,HTML返回浏览器。该HTML包含一个图像标记。当浏览器解析HTML时,它会找到图像标记并生成另一个对web服务器的请求。此请求要求从CGI目录中获取iamge文件。web服务器尝试执行映像文件,但不起作用。因此,web服务器返回500错误,浏览器显示“断开图像”图标

我敢打赌,如果您查看web服务器错误日志,您将看到一条关于图像文件“执行失败”的消息

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

我很遗憾地看到,您仍然没有在程序中更改90年代中期的HTML,也没有切换到使用模板系统

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

这将在错误日志中显示“404文件未找到”错误


Update2:因此您添加了错误日志中的文本,正如预测的那样,这是一个“未找到文件”错误(尽管我不完全确定这些十六进制字符来自何处).

我不明白为什么这些人甚至不能发布他们在对话中明显上传的图片,这会导致在帖子中包含图片的降价。他们是否都删除了
[!…][1]
中的
[![text][1]][1]
部分,因为它看起来很奇怪,而且他们认为它是错误的?如果他们担心那么多,那么他们为什么要首先发布一张图片…?我曾经发布过一张解决方案的图片作为回应,所以OP至少必须重新键入它。这很卑鄙,但我很喜欢它,因为它是一种回报。:-)刚从数据文件添加的文本记录与图像中的文本不同。哪个版本是正确的?应该是第二个版本,所以图像是错误的?老实说,在查看错误日志时,这似乎不太可能。@DaveCross该表与这两个错误的结果是相同的。我只是使用文本文件中的第一行项目作为示例,说明了桌子上的照片是如何工作的。但是错误消息也是一样的吗?我打赌不是。
 [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