Cache
[ class tree: Cache ] [ index: Cache ] [ all elements ]

Source for file Output.php

Documentation is available at Output.php

  1. <?php
  2. // +----------------------------------------------------------------------+
  3. // | PEAR :: Cache                                                        |
  4. // +----------------------------------------------------------------------+
  5. // | Copyright (c) 1997-2003 The PHP Group                                |
  6. // +----------------------------------------------------------------------+
  7. // | This source file is subject to version 2.0 of the PHP license,       |
  8. // | that is bundled with this package in the file LICENSE, and is        |
  9. // | available at through the world-wide-web at                           |
  10. // | http://www.php.net/license/2_02.txt.                                 |
  11. // | If you did not receive a copy of the PHP license and are unable to   |
  12. // | obtain it through the world-wide-web, please send a note to          |
  13. // | license@php.net so we can mail you a copy immediately.               |
  14. // +----------------------------------------------------------------------+
  15. // | Authors: Ulf Wendel <ulf.wendel@phpdoc.de>                           |
  16. // |          Christian Stocker <chregu@phant.ch>                         |
  17. // |          Vinai Kopp <kopp@netzarbeiter.de>                           |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: Output.php 315102 2011-08-17 19:38:20Z cweiske $
  21.  
  22. require_once 'Cache.php';
  23.  
  24. /**
  25. * Class to cache the output of a script using the output buffering functions
  26. *
  27. * Simple output cache. Some pages require lots of time to compute. Caching the
  28. * output can increase the overall speed dramatically, especially if you use
  29. * a Shared Memory storage container.
  30. *
  31. * As you can see in the example the usage is extemely simple. To cache a script
  32. * simple put some few lines of code in front of your script and some at the end.
  33. * A preferrable place for this are the auto_prepend and auto_append files (=> php.ini).
  34. *
  35. * Usage example:
  36. *
  37. *  // place this somewhere in a central config file
  38. *  define(CACHE_STORAGE_CLASS, 'file');
  39. *  // file storage needs a dir to put the cache files
  40. *  define(CACHE_DIR, '/var/tmp/');
  41. *
  42. *  // get a cache object
  43. *  $cache = new Cache_Output(CACHE_STORAGE_CLASS, array('cache_dir' => CACHE_DIR));
  44. *
  45. *  // compute the unique handle.
  46. *  // if your script depends on Cookie and HTTP Post data as well
  47. *  // you should use:
  48. *  // $cache_handle = array(
  49. *  //                       'file' => $REQUEST_URI,
  50. *  //                       'post' => $HTTP_POST_VARS,
  51. *  //                       'cookie'  => $HTTP_COOKIE_VARS
  52. *  //                    );
  53. *  // But be warned, using all GET or POST Variables as a seed
  54. *  // can be used for a DOS attack. Calling http://www.example.com/example.php?whatever
  55. *  // where whatever is a random text might be used to flood your cache.
  56. *  $cache_handle = $cache->generateID($REQUEST_URI);
  57. *
  58. *  // now the magic happens: if cached call die()
  59. *  // to end the time consumptiong script script execution and use the cached value!
  60. *  if ($content = $cache->start($cache_handle)) {
  61. *     print $content;
  62. *     print '<p>Cache hit</p>';
  63. *     die();
  64. *  }
  65. *
  66. *  // time consumption script goes here.
  67. *
  68. *  // store the output of the cache into the cache and print the output.
  69. *  print $cache->end();
  70. *  print "<p>Cache miss, stored using the ID '$id'.</p>";
  71. *
  72. *  If you do not want to cache a whole page - no problem:
  73. *
  74. *  if (!($content = $cache->start($cache_handle))) {
  75. *     // do the computation here
  76. *     print $cache->end()
  77. *  } else {
  78. *     print $content;
  79. *  }
  80. *
  81. *  If you need an example script check the (auto_)prepend and (auto_)append
  82. *  files of my homepage:
  83. *
  84. *    http://www.ulf-wendel.de/php/show_source.php?file=prepend
  85. *    http://www.ulf-wendel.de/php/show_source.php?file=append
  86. *
  87. *  Don't know how to use it or you need profiling informations?`
  88. *  Ask Christian he was patient with me and he'll be so with your questions ;).
  89. *
  90. *  Have fun!
  91. *
  92. @authors  Ulf Wendel <ulf.wendel@phpdoc.de>
  93. @version  $ID: $
  94. @package  Cache
  95. @access   public
  96. */
  97. class Cache_Output extends Cache
  98. {
  99.  
  100.     /**
  101.     * ID passed to start()
  102.     *
  103.     * @var  string 
  104.     * @see  start(), end()
  105.     */
  106.     var $output_id = '';
  107.  
  108.     /**
  109.     * Group passed to start()
  110.     *
  111.     * @var  string 
  112.     * @see  start(), end()
  113.     */
  114.     var $output_group = '';
  115.  
  116.     /**
  117.     * PEAR-Deconstructor
  118.     * Call deconstructor of parent
  119.     */
  120.     function _Cache_Output()
  121.     {
  122.         $this->_Cache();
  123.     }
  124.  
  125.     /**
  126.     * starts the output buffering and returns an empty string or returns the cached output from the cache.
  127.     *
  128.     * @param    string  dataset ID
  129.     * @param    string  cache group
  130.     * @return   string 
  131.     * @access   public
  132.     */
  133.     function start($id$group 'default')
  134.     {
  135.         if (!$this->caching{
  136.             return '';
  137.         }
  138.         // this is already cached return it from the cache so that the user
  139.         // can use the cache content and stop script execution
  140.         if ($content $this->get($id$group)) {
  141.             return $content;
  142.         }
  143.         // remember some data to be able to fill the cache on calling end()
  144.         $this->output_id = $id;
  145.         $this->output_group = $group;
  146.  
  147.         // WARNING: we need the output buffer - possible clashes
  148.         ob_start();
  149.         ob_implicit_flush(false);
  150.  
  151.         return '';
  152.     // end func start
  153.  
  154.     /*
  155.     * Stores the content of the output buffer into the cache and returns the content.
  156.     *
  157.     * @param    mixed   lifetime of the cached data in seconds - 0 for endless. More formats available. see Container::getExpiresAbsolute()
  158.     * @param    string  additional userdefined data
  159.     * @return   string  cached output
  160.     * @access   public
  161.     * @see      endPrint(), endGet(), Container::getExpiresAbsolute()
  162.     */
  163.     function end($expire = 0$userdata '')
  164.     {
  165.         $content ob_get_contents();
  166.         ob_end_clean();
  167.  
  168.         // store in the cache
  169.         if ($this->caching{
  170.             $this->container->save($this->output_id$content$expire$this->output_group$userdata);
  171.         }
  172.         return $content;
  173.     // end func end()
  174.  
  175.     /**
  176.     * Stores the content of the output buffer into the cache and prints the content.
  177.     *
  178.     * @brother  end()
  179.     */
  180.     function endPrint($expire = 0$userdata '')
  181.     {
  182.         $this->printContent($this->end($expire$userdata));
  183.     // end func endPrint
  184.  
  185.     /**
  186.     * Sends the data to the user.
  187.     * This is for compatibility with OutputCompression
  188.     * 
  189.     * @param    string 
  190.     * @access   public
  191.     */    
  192.     function printContent($content '')
  193.     {
  194.         if ($content == ''{
  195.             $content &$this->container->cachedata;
  196.         }
  197.         print $content;
  198.     }
  199.     /**
  200.     * Returns the content of the output buffer but does not store it into the cache.
  201.     *
  202.     * Use this method if the content of your script is markup (XML)
  203.     * that has to be parsed/converted (XSLT) before you can output
  204.     * and store it into the cache using save().
  205.     *
  206.     * @return   string 
  207.     * @access   public
  208.     * @see      endPrint(), end()
  209.     */
  210.     function endGet()
  211.     {
  212.         $content ob_get_contents();
  213.         ob_end_clean();
  214.  
  215.         $this->output_id = '';
  216.         $this->output_group = '';
  217.  
  218.         return $content;
  219.     // end func endGet
  220. // end class output
  221. ?>

Documentation generated on Mon, 11 Mar 2019 15:44:50 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.