在perl和python中,都必须在页面内容之前打印一些标题(如果需要)和换行.否则,您将得到一个错误-标头之前的脚本输出结束.
在php中,情况有所不同.每当您打印某些内容时(使用print“”或echo“”),即使您尝试打印标题,也将其假定为纯文本.为此(打印标题),应使用header()函数(在perl和python中不可用).
一些例子:
<?php
# this is a plain text in the page, you can use 'echo ""' to get the same result
print "Content-type: text/plain; charset=utf-8\n\n";
#!usr/bin/perl
# this is a header with two new lines after it (without them you get the error)
print "Content-type: text/plain; charset=utf-8\n\n";
# (the same is in python)
<?php
print "Some text, no headers are sent, no new lines are printed and you get no errors";
#!usr/bin/perl
print "Some text, no headers are sent, no new lines are printed and you get an error.";
# (the same is in python)
您必须在python中的perl中而不是php中的文本之前放置新行.用类似语言编写的相同代码会有不同的结果吗?
为什么在perl和python中使用print()标头,而在php中使用header()标头?
为什么在php中不必打印新行来表示“标题结尾”?
解决方法:
PHP遵循“ X Server Pages”处理模型-ASP和JSP是此范例的另外两个示例-模板中的所有内容都是要写入客户端的文本,除非包装在特殊标签中导致PHP引擎执行代码.可以将这些文本块视为隐式包装的打印语句.通常,对输出进行缓冲,直到处理到达模板的末尾为止,此时写入累积的标头,然后写入累积的页面输出缓冲区.
您提供的Perl代码是CGI编程的示例,并且使用原始Perl或使用CGI模块,文件(一个普通的旧Perl程序)中的所有内容都是代码,并且输出将发送到客户端订购它的顺序.由于HTTP协议说先发送标题,然后发送页面内容,因此,在打印页面内容之前,必须打印标题.
因此,您的Perl程序是您可以获得的最低级别的处理.您正在从头开始进行所有操作,因为您使用的是通用编程语言,而不是使用包含更高级别Web处理功能的任何模块.
另一方面,PHP是高级程序系统,专门用于生成HTML页面.因此,PHP知道您需要标题和内容(而Perl只是认为您正在打印东西),并希望您使用它提供的header()函数.
我怀疑您在Python中所做的事情与在Perl中所做的相似.