Home > Article > Backend Development > The header location redirection statement fails to jump to the page_PHP tutorial
Function header function:
Page jump
http header information
Header information has many functions, the most important ones are the following:
1. Jump
When the browser receives the Location: xxxx in the header information, it will automatically jump to the URL pointed to by xxxx. This is somewhat similar to writing a jump in js. But this jump is only known by the browser, and users cannot see it regardless of whether there is anything in the content.
Example: header("Location: http://www.bkjia.com/");
2. The content of the specified web page
For the same XML file, if Content-type: application/xml is specified in the header information, the browser will parse it according to the XML file format. However, if the header information is: Content-type: text/xml, the browser will parse it as stored text. (Browsers do not parse files according to extensions)
Example: header('Content-type: application/pdf');
3. Attachment
I don’t know if you have noticed that sometimes when downloading something from some websites, after clicking the download link, the browser opens the attachment as a web page, and all the garbled characters are displayed. This problem is also related to the header information. Sometimes the browser determines whether to open or save based on Content-type, so sometimes it will make a wrong judgment (mainly because the website designer forgets to write Content-type). In fact, there is another way to specify that the content is an attachment and needs to be saved. This is: Content-Disposition: attachment; filename="xxxxx"
Example: header('Content-Disposition: attachment; filename="downloaded.pdf"');
//Open the file and output
readfile('original.pdf');
HTTP protocol status code
1×× Reserved
2×× Indicates that the request was successfully received
3×× In order to complete the request, the customer needs to further refine the request
4×× Customer error
5×× Server error
Syntax:
header(string,replace,http_response_code)
Parameters
String: required. Specifies the header string to be sent.
Replace: optional. Indicates whether this header replaces the previous header, or adds a second header. Default is true (replacement). false (allow multiple headers of the same type).
http_response_code: optional. Forces the HTTP response code to the specified value. (Available in PHP 4 and above)
Example 1:
Redirect webpage
header("Location: http://www.example.com/");
exit;
?>
Example 2:
Force users to get the latest information every time they visit this page, rather than using the client's cache.
//Tell the browser the expiration time of this page (expressed in Greenwich Mean Time), as long as it is a date that has passed.
header("Expires:Mon,26 Jul 1970 05:00:00 GMT");
//Tell the browser the last updated date of this page (expressed in Greenwich Mean Time), which is the same day, the purpose is to force the browser to obtain the latest information
header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");
//Tell the client browser not to use cache
header("Cache-Control: no-cache, must-revalidate");
//Parameters (compatible with previous servers), that is, compatible with HTTP1.0 protocol
header("Pragma: no-cache");
?>
Example 3:
Output the status value to the browser, mainly used for access control
header('HTTP/1.1 401 Unauthorized');
header('status: 401 Unauthorized');
?>
Example 4:
To restrict a user from accessing this page, you can set the status to 404, as shown below, so that the browser will display that the page does not exist
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found"); //This writing is wrong
?>
Example 5:
Location of hidden files
html tag can realize ordinary file downloading. If you want to keep the file confidential and you cannot tell others the file link, you can use the header function to download the file.
header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=filenale");
header("Content-Description: PHP3 Generated Data");
Example 6:
Input content before header function
Generally speaking, html content cannot be output before the header function. Similarly, there are setcookie() and session functions. These functions need to add message header information to the output stream. If there are statements such as echo before header() is executed, when header() is encountered later, a "Warning: Cannot modify header information - headers already sent by ...." error will be reported. That is to say, there cannot be any text, blank lines, carriage returns, etc. in front of these functions, and it is best to add the exit() function after the header() function. For example, in the following incorrect writing, there is a blank line between the two PHP code snippets:
//some code here
?>
//This should be a blank line
header("http/1.1 403 Forbidden");
exit();
?>
Reason:
When a PHP script starts executing, it can send http message header (title) information and body information at the same time. The http message header (from the header() or SetCookie() function) is not sent immediately, instead, it is saved to a list. This allows you to modify the header information, including the default header (such as the Content-Type header). However, once the script sends any non-header output (for example, using HTML or a print() call), then PHP You must first send all the headers, then terminate the HTTP header, and then continue to send the body data. From this point on, any attempt to add or modify the header information is not allowed, and one of the above error messages will be sent.
Solution:
Modify php.ini to open the cache (output_buffering) and change output_buffering=0 to output_buffering=4096
Or use the cache functions ob_start(), ob_end_flush(), etc. in the program. The principle is: when output_buffering is enabled, PHP does not send the HTTP header when the script sends output. Instead, it pipes this output into a dynamically growing cache (only available in PHP 4.0, which has a centralized output mechanism). You can still modify/add headers, or set cookies, since headers are not actually sent. When all scripts terminate, PHP will automatically send HTTP headers to the browser, and then send the contents of the output buffer.