PHP Tutorials - Herong's Tutorial Examples
Dr. Herong Yang, Version 3.00

HttpHeaderLines.php - Examples of Inserting Header Lines

This section provides a tutorial example on how to insert HTTP response header lines using the header() function.

Now let's see how the PHP engine defines header lines and how you can control them. First create this simple script, hello.php, and copy it to c:\inetpub\wwwroot.

Hello <?php echo "world!"; ?>

Then obtain the response with "php HttpRequestGet.php /hello.php":

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Sat, 19 Nov 2005 02:39:52 GMT
Content-type: text/html
X-Powered-By: PHP/5.0.4

Hello world!

Comparing with the static files described in the previous section, the output shows:

  • PHP engine added its own header line, "X-Powered-By".
  • IIS maintained the header line, "Server".
  • "ETag" was removed. I don't know what is ETag anyway.
  • PHP defaulted "Content-Type" to "text/html".
  • "Content-Length" is not provided. This is not a good behavior, if the client relies on this value.

Now, I am ready to instruct the PHP how to define header lines. Here is my testing script, HttpHeaderLines.php:

<?php #HttpHeaderLines.php
# Copyright (c) 2005 by Dr. Herong Yang, http://www.herongyang.com/
#
   $text = "<html><body>Hello world!</body></html>";
   print($text);
   header("Content-Type: text/xml;charset=utf-8");
   header("Content-Length: ".strlen($text));
   header("Version: Unknown");
   header("Version: 2005");
   header("Key-Word: PHP");
   header("Key-Word: HTTP", false);
?>

Here is the output:

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Sat, 19 Nov 2005 02:28:32 GMT
Content-Type: text/xml;charset=utf-8
X-Powered-By: PHP/5.0.4
Content-Length: 38
Version: 2005
Key-Word: PHP
Key-Word: HTTP

<html><body>Hello world!</body></html>

Okay. What can we say about the output?

  • I was able to call header() after I started to output the entity body, because I had the output buffer turned on. I entered "output_buffering = 4096" in php.ini.
  • "Content-Type" defined ok.
  • "Content-Length" defined ok. But it was outputted after "X-Powered-By". Not sure why.
  • The "replace" flag worked. There is only one "Version", because by default replace is turned on. There are two "Key-Word", because I set "replace" to "false" in my second header() call.

Last update: 2005.

Sections in This Chapter

What Is an HTTP Response?

HTTP Response Header Lines

header() - Inserting a Raw Header Lines

HttpRequestGet.php - Viewing Header Lines

Response Header Lines of Static Files

HttpHeaderLines.php - Examples of Inserting Header Lines

Location: - Forcing the Browser to Redirect to Another URL

Content-Type: - Generating Non-HTML Response Body

Content-Disposition: - Sending Files for Downloading

Dr. Herong Yang, updated in 2009
HttpHeaderLines.php - Examples of Inserting Header Lines