gpt4 book ai didi

php - php、perl 和 python 中的 HTTP header

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:05 26 4
gpt4 key购买 nike

在 perl 和 python 中,您必须打印一些标题(如果需要)和页面内容之前的新行。否则你会得到一个错误 - End of script output before headers

在 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)

你必须在 perl 中的文本之前放置一个新行,在 python 中而不是在 php 中。同样的代码用相似的语言却有如此不同的结果?

为什么在 perl 和 python 中你print() headers 但在 php 中你header() 它们?

为什么在 php 中你不必打印新行来表示“标题结束”?

最佳答案

PHP 遵循“X 服务器页面”处理模型 - ASP 和 JSP 是此范例的另外两个示例 - 模板中的所有内容都是要写入客户端的文本,除非包裹在导致 PHP 引擎执行代码的特殊标记中.将这些文本 block 视为隐式包装的打印语句。通常,输出会被缓冲,直到处理到达模板的末尾,此时写入累积的 header ,然后写入累积的页面输出缓冲区。

您提供的 Perl 代码是 CGI 编程的示例,使用原始 Perl 或使用 CGI 模块,文件中的所有内容(普通的旧 Perl 程序)都是代码,输出被发送到客户按照它写的顺序。由于 HTTP 协议(protocol)规定首先发送 header ,然后发送页面内容,因此您必须 print你的标题,在你之前print您的页面内容。

因此您的 Perl 程序是您可以获得的最低级处理。您正在从头开始做所有这一切,因为您使用的是通用编程语言,而不是使用任何封装更高级别 Web 处理功能的模块。

PHP则是一个高级程序系统,专门用于生成HTML页面。所以 PHP 知道您需要标题和内容(而 Perl 只是认为您正在打印内容),并希望您使用它提供的 header() 函数。

我怀疑您在 Python 中的操作方式与您在 Perl 中的操作方式类似。

关于php - php、perl 和 python 中的 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com