CGI Perl脚本将HTML(以及'content-type:text / html')字符串打印到浏览器而不是呈现它。怎么修?

时间:2010-04-12 10:03:27

标签: perl cgi

我有一个需要发回一些HTML的perl CGI脚本

print qq^Content-type: text/html\n\n
<HTML>
<HEAD>
<TITLE>some title</TITLE>
...
...
...
...
^:

我没有在浏览器中看到呈现的HTML,而是以纯文本形式看到整个HTML以及标记和“内容类型”行。以下是浏览器中的内容 -

Content-type: text/html


    <HTML>
    <HEAD>
    <TITLE>some title</TITLE>
    </HEAD>
    <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#000000" VLINK="#000000" ALINK="#000000" BACKGROUND="" onLoad=document.forms[0].elements[0].focus();>

4 个答案:

答案 0 :(得分:1)

似乎在输出之前发送了HTTP-header。在此代码之前,您是否有任何print语句(可能在某些函数中)?

此外,尝试启用警告和限制(如果你关闭它们)。

答案 1 :(得分:1)

此外,由于可以在没有Web服务器的情况下调用CGI脚本,只需手动调用脚本(如果它们对脚本很重要并使用正确的参数/环境变量并查看输出。如eugene y所示,请求标头必须是CGI脚本的第一个输出,供服务器选择。

答案 2 :(得分:0)

听起来好像您的服务器尚未配置为将某些文件类型识别为cgi可执行文件。假设您正在使用Apache,将此行添加到您的httpd.conf将会起到作用,尽管还有许多其他方法可以配置它以实现相同的效果:

AddHandler cgi-script .cgi .pl

您可能还需要将ExecCGI添加到您的域的选项列表中。有关详细信息,请参阅Apache Tutorial: Dynamic Content with CGI

答案 3 :(得分:0)

  

print“Content-type:text / html \ n \ n”;   这告诉浏览器两个换行符之后的文档将是HTML。您必须发送一个标题,以便浏览器知道接下来会出现什么类型的文档,并且您必须在标题和实际文档之间包含一个空行。

所以在“Content-type:text / html \ n \ n”

之后你需要一个空行