如何在Python CGI页面中加载/显示图片
我用Python和CGI写了一个小调查问卷。我想用普通的 <img>
标签来显示一张图片,但即使这张图片和我的CGI脚本在同一个文件夹里,我的脚本还是无法显示它。我还把头部信息改成了这样:
print "Content-type: text/html; image/jpeg"
print
print """<html>
<head>
<title>You are going to be redirected</title>
</head>
<body bgcolor = #14b585>
<br>
<p align=center><font>Helloooo</font></p>
<img src="cat.jpeg" alt="cat" width="304" height="228"/>
<form action="./sample.py" method="post">
<p align=center><input type="submit" value="YES!" /></p>
</form>
</body>
</html>
"""
为什么会这样呢?(这是一张非常小的jpg文件)
2 个回答
你的Apache服务器被设置成使用cgi-bin这个文件夹来存放CGI脚本,所以任何请求想要从这个文件夹获取文件时,Apache都会试图把它当作CGI脚本来执行。为了让你的图片能够显示出来,把它移动到www/html文件夹里。
print "Content-type: text/html; image/jpeg"
别把头部改成那样。一个文档不能有多种内容类型(除了多部分文档,但浏览器不支持这种格式,而且这也不是正确的格式)。
你正在发送一个HTML文档,里面有一个图片的引用。这个图片会单独请求和响应。
print "Content-type: text/html"
或者,更好的做法是:
print "Content-type: text/html; charset=utf-8"
(假设你在使用utf-8,这个是应该的)。
print """<html>
你的文档类型声明缺失了。这会导致浏览器进入一种不好的兼容模式。你还有很多旧的样式标记,这些应该用CSS来替代。
<img src="cat.jpeg" alt="cat" width="304" height="228"/>
根据上下文来看,这张图片是装饰性的,所以替代文本可能应该是""
(可以参考IMGS中的替代文本),但对图片的实际引用没有问题。
不过即使这张图片和我的cgi脚本在同一个目录下
因为HTML看起来没问题,你需要检查一下图片。
你能直接输入网址访问这张图片吗?
当你尝试时,网页服务器的日志显示了什么?
有可能你的服务器设置成把目录里的所有东西都当作可执行文件来处理,不管文件扩展名是什么,所以它可能在尝试把图片当作CGI程序来运行(这显然会失败)。如果是这样,你可以把图片移动到别的地方,或者改变服务器的配置。
我刚注意到这个评论:
我在浏览器里这样做了:localhost/cgi-bin/cat.jpg,结果出错了,我查看了日志,显示Exec format error: exec of '/home/hossein/public_html/cgi-bin/cat.jpg' failed
这就是发生的事情。移动图片是最简单的解决办法。