簡體   English   中英

php,perl和python中的HTTP標頭

[英]HTTP headers in php, perl and python

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

你必須在python中的perl文本之前放置一個新行,而不是在php中。 相似語言中的相同代碼有如此不同的結果?

為什么在perl和python中你print()標題但在php中你header()它們?

為什么在php中你不必打印新行來說“標題結束”?

PHP遵循“X Server Pages”處理模型 - ASP和JSP是此范例的另外兩個示例 - 模板中的所有內容都是要寫入客戶端的文本,除非包含在導致PHP引擎執行代碼的特殊標記中。 將這些文本塊視為隱式包裝的打印語句。 通常,輸出被緩沖,直到處理到達模板的末尾,此時寫入累積的標題,然后是累積的頁面輸出緩沖區。

您提供的Perl代碼是CGI編程的示例,使用原始Perl或使用CGI模塊,文件中的所有內容(一個普通的舊Perl程序)都是代碼,輸出發送到客戶端命令它寫的。 由於HTTP協議說,首先你發送標題,然后發送頁面內容,這就是為什么你要print你的頭,你之前print您的網頁內容。

因此,您的Perl程序是您可以獲得的最低級別處理。 您正在從頭開始做所有這些,因為您使用的是通用編程語言,而不是使用任何包含更高級別Web處理功能的模塊。

另一方面,PHP是一個更高級別的程序系統,專門用於生成HTML頁面。 所以PHP知道你需要標題和內容(而Perl只是認為你正在打印東西),並期望你使用它提供的header()函數。

我懷疑你在Python中做的事情與你在Perl中做的事情類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM