12. Output Buffers Control - PHP & MySQL Web Development


Published on

Basic concepts about Output Buffers Control and HTTP Headers
Telerik Software Academy: http://academy.telerik.com/school-academy/meetings/details/2011/10/11/php-school-academy-meeting
The website and all video materials are in Bulgarian.

This lecture discusses the following topics:

HTTP headers
Output buffer control
Browser cache
Redirecting the browser

Published in: Education, Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

12. Output Buffers Control - PHP & MySQL Web Development

  1. 1. Output Buffers Control and HTTP Headers Output Buffers, HTTP HeadersNikolay KostovTechnical Trainerhttp://nikolay.itTelerik Software Academyacademy.telerik.com
  2. 2. Contents HTTP headers Output buffer control Browser cache Redirecting the browser
  3. 3. HTTP Headers Each HTTP request and response contains of headers and body  Headers describe the transferred data  Type  Length  Encoding  Etc.  PHP can modify the response headers  header function
  4. 4. HTTP Headers (2) header($header, $replace, $response_code)  Adds or modifies HTTP header of the response  $header is string in the following form  Name: Value  $replace sets whether to replace existing similar header with the same name or add it  $response_code sets the HTTP response code (e.g. 302, 404, etc.)
  5. 5. HTTP Headers – Example Redirect the Web browser header ("Location: http://otherplace.net"); Set multiple headers with one name  Example: force browser to require HTTP authentication header ("WWW-Authenticate: Negotiate"); header (WWW-Authenticate: Basic realm="Secure Area", false); Example: page inaccessible header ("HTTP/1.0 404 Not Found"); // or maybe header ("HTTP/1.1 403 Forbidden");
  6. 6. HTTP Headers – Example Example: Page receives get parameter "down" that is some MP3 file ID in directory (MP3DIR constant)  This script will either send 404 error on request or will return the MP3 file for download$file = MP3DIR.$_GET[down].".mp3";if (!file_exists($file)) header ("HTTP/1.0 404 Not Found",true,404);else { header (Content-Type: audio/x-mp3); header (Content-Length: . filesize($file)); header(Content-Disposition: attachment; . filename=.$_GET[down]..mp3); echo file_get_contents($file);}
  7. 7. Control Browser Cache Browser cache resources, downloaded over network  On next request they use the headers to detect if they should re-download or reuse the cached resource  Resources carry set of headers to control the browser caching  Expires header, Last-Modified, If-Modified-Since header  ETag, If-None-Match  Cache-Control
  8. 8. Control Browser Cache HTTP Request Example:GET /index.html HTTP/1.0User-Agent: Mozilla/5.0From: something.somewhere.netAccept: text/html,text/plain,application/*Host: www.example.comIf-Modified-Since: Wed, 19 Oct 2005 10:50:00GMT HTTP Response Example:HTTP/1.1 304 Not ModifiedDate: Fri, 31 Dec 1999 23:59:59 GMT
  9. 9. Modification Date Server sends Last-Modified and Expires dates in response for the resource  Tells the browser how long the resource should be kept as current version  Both in GMT format Browser sends If-Modified-Since header on each request with the date of the resource it has cached  If version is latest, server replies with "303 Not Modified" HTTP code
  10. 10. ETag approach ETag is unique identifier for the resource and its version  Sent by the server, stored by the browser  Browser sends on next request the ETag of the cached version  Sends the ETag in If-None-Match header  Newer approach  Most web servers send both Last-Modified and ETag headers
  11. 11. Controlling browser cache engine Server can send Cache-Control header that instruct the browser cache engine  Value consists of comma separated name=value pairs or only names  max-age=seconds – sets maximum time that version should be considered fresh  s-maxage=seconds – same as max-age but applies to proxies  public – marks headers of response as cacheable
  12. 12. Controlling browser cache engine no-cache – instructs revalidation to be required on next request  Usually performed as HEAD request no-store – instructs not to store version of the resource under any circumstances must-revalidate – tells cache engines they must obey and freshness information you give them  Some caches load older version under some circumstances proxy-revalidate – similar to must-revalidate but applies to proxies
  13. 13. Disable Browser Cache - Exampleheader(Cache-Control: no-cache);header(Pragma: no-cache);header("Expires: 0");
  14. 14. Output model The Web server (Apache) buffers the script output  Sends it automatically if there is enough data to send (buffer is full)  Buffer can be controlled  Multiple buffers can be defined and flushed, canceled or stored  Allows reordering of the output data  Example – first run script that generates page body, then print head  Example – first print output, then send headers
  15. 15. Output buffer Functions for buffer control are prefixed with ob_ in PHP ob_start ($callback, $chunk, $erase) – starts new buffer  After this function is called no output is sent to the browser, except headers  Output buffers are stackable  Can call second ob_start while another is active
  16. 16. ob_start All parameters are optional  $callback is function name to call when buffer is flushed  This function can modify the data to be sent  Receives one parameter – the data in the buffer  Must return string – the data to be sent  If $chunk is specified, buffer will flush if stored data reaches this size  Value of 0 means no automatic flush  Value of 1 sets $chunk to 4096  $erase sets whether the buffer should not be deleted until script ends
  17. 17. Flushing the buffer ob_flush – sends the buffer content and erases all stored data  Keeps the buffer active ob_end_flush – similar to ob_flush but destroys the buffer ob_implicit_flush ($mode) – sets implicit flush on or off  $mode is optional boolean, defaults to true  With implicit flush, all writing to the buffer is automatically sent
  18. 18. Reading the buffer data ob_get_contents – returns the content of the current buffer as string  Doesnt clear or stop the buffer ob_get_clean – returns the buffer content and deletes it ob_get_flush – returns the buffer content, flushes it and deletes it
  19. 19. Destroying buffer ob_clean – erases the data in the output buffer but does not delete the buffer ob_end_clean – cleans the output buffer data and deletes the buffer ob_end_flush – flushes the output buffer and deletes it
  20. 20. Output Buffers Control and HTTP Headers курсове и уроци по програмиране, уеб дизайн – безплатно BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране – Телерик академия форум програмиране, форум уеб дизайн уроци по програмиране и уеб дизайн за ученици ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET http://academy.telerik.com програмиране за деца – безплатни курсове и уроци ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC безплатен SEO курс - оптимизация за търсачки алго академия – състезателно програмиране, състезаниякурсове и уроци по програмиране, книги – безплатно от Наков курс мобилни приложения с iPhone, Android, WP7, PhoneGap уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop Дончо Минков - сайт за програмиране free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране безплатен курс "Качествен програмен код" безплатен курс "Разработка на софтуер в cloud среда" C# курс, програмиране, безплатно
  21. 21. Exercises1. Create pages login.php and main.php and implement the following logic:  The login.php displays login form (username/password)  If successfully authenticated, the user is redirected to the main.php  Otherwise an error message is shown and the login form is displayed again  If main.php is requested and the user is not logged in, it redirects to login.php  Implement also “Logout” functionality
  22. 22. Free Trainings @ Telerik Academy “PHP & MySQL Web Design" course academy.telerik.com/.../php-school- academy-meeting Telerik Software Academy  academy.telerik.com Telerik Academy @ Facebook  facebook.com/TelerikAcademy Telerik Software Academy Forums  forums.academy.telerik.com