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

Source for file schema_cache.php

Documentation is available at schema_cache.php

  1. <?php
  2. /**
  3. * This is a short example on how to use the schema cache facility.
  4. * Schema caching allows you to store the fetched schema on disk
  5. * (or wherever you want, depending on the cache class used) so
  6. * initialisation of Net_LDAP2 becomes a little faster.
  7. *
  8. * Two examples will be showed here:
  9. * 1. how to use the packaged file based cache
  10. * 2. how to write a custom cache class
  11. */
  12.  
  13. // Class includes; this assumes Net_LDAP2 installed in PHPs include path
  14. // or under subfolder "Net" in the local directory.
  15. require_once 'Net/LDAP2.php';
  16.  
  17. // Configuration
  18. // host can be a single server (string) or multiple ones - if we define more
  19. // servers here (array), we can implement a basic fail over scenario.
  20. // If no credentials (binddn and bindpw) are given, Net_LDAP2 establishes
  21. // an anonymous bind.
  22. // See the documentation for more information on the configuration items!
  23. $ldap_config = array(
  24. // 'host'    => 'ldap.example.org',
  25.     'host'    => array('ldap1.example.org''ldap2.example.org'),
  26. // 'binddn'  => 'cn=admin,o=example,dc=org',
  27. // 'bindpw'  => 'your-secret-password',
  28.     'tls'     => false,
  29.     'base'    => 'o=example,dc=org',
  30.     'port'    => 389,
  31.     'version' => 3,
  32.     'filter'  => '(cn=*)',
  33.     'scope'   => 'sub'
  34. );
  35.  
  36.  
  37. /*
  38. * EXAMPLE 1: How to use the packaged file based cach
  39. *            This cache class stores the schema object on disk once Net_LDAP2
  40. *            initially fetched it from the LDAP server. This will make Net_LDAP2
  41. *            use the disk version instead of loading the schema from LDAP
  42. *            unless the schema object becomes too old.
  43. */
  44.  
  45. // Configuring the schema cacher
  46. // see the source code of SimpleFileSchemaCache.php for config options
  47. // An interesting idea is, to store the file in some tmpfs mount, which will
  48. // result in storing the schema cache in memory instead of disk.
  49. $mySchemaCache_cfg = array(
  50.     'path'    =>  '/tmp/Net_LDAP2_Schema.cache'// place to put cache file
  51.     'max_age' =>  86400 // max age is 24 hours (in seconds)
  52. );
  53.  
  54. // Initialize cache with the config
  55. $mySchemaCache = new Net_LDAP2_SimpleFileSchemaCache($mySchemaCache_cfg);
  56.  
  57. // As usual, connect to configured ldap server
  58. $ldap Net_LDAP2::connect($ldap_config);
  59. if (Net_LDAP2::isError($ldap)) {
  60.     die('BIND FAILED: '.$ldap->getMessage());
  61. }
  62.  
  63. // and finally register our initialized cache object
  64. $res $ldap->registerSchemaCache($mySchemaCache);
  65. if (Net_LDAP2::isError($res)) {
  66.     die('REGISTER CACHE FAILED: '.$res->getMessage());
  67. }
  68.  
  69. // Here we go, Net_LDAP2 will fetch the schema once and then use the disk version.
  70.  
  71.  
  72.  
  73.  
  74.  
  75. /*
  76. * EXAMPLE 2: How to write a custom cache class
  77. *            Writing a custom cache class is easy. You just have to wipe out a
  78. *            class that implements the SchemaCache interface.
  79. *            How a cache class must look like is documented in the interface
  80. *            definition file: SchemaCache.interface.php
  81. *            Here we will write a small hacky cache that stores the schema
  82. *            in the php session. This gives us a nice per-user cache that
  83. *            survives for the php session. This cache will obviously not
  84. *            be so performant as the SimpleFileSchemaCache but may be
  85. *            useful for other purposes.
  86. */
  87.  
  88. // Firstly, we need our custom schema class...
  89. class MySessionSchemaCache implements Net_LDAP2_SchemaCache {
  90.     /**
  91.     * Initilize the cache
  92.     *
  93.     * Here we do nothing. You can use the class constructor for everything you
  94.     * want, but typically it is used to configure the caches config.
  95.     */
  96.     public function MySessionSchemaCache ({
  97.         // nothing to see here, move along...
  98.     }
  99.  
  100.     /**
  101.     * Load schema from session
  102.     *
  103.     * For the sake of simplicity we dont implement a cache aging here.
  104.     * This is not a big problem, since php sessions shouldnt last endlessly.
  105.     *
  106.     * @return Net_LDAP2_Schema|Net_LDAP2_Error|false
  107.     */
  108.     public function loadSchema({
  109.         // Lets see if we have a session, otherwise we cant use this cache
  110.         // and drop some error that will be returned by Net_LDAP2->schema().
  111.         // Minor errors should be indicated by returning false, so Net_LDAP2
  112.         // can continue its work. This will result in the same behavior as
  113.         // no schema cache would have been registered.
  114.         if (!isset($_SESSION)) {
  115.             return new Net_LDAP2_Error(__CLASS__.": No PHP Session initialized.".
  116.                                        " This cache needs an open PHP session.");
  117.         }
  118.  
  119.         // Here the session is valid, so we return the stores schema.
  120.         // If we cant find the schema (because cahce is empty),w e return
  121.         // false to inidicate a minor error to Net_LDAP2.
  122.         // This causes it to fetch a fresh object from LDAP.
  123.         if (array_key_exists(__CLASS__$_SESSION)
  124.         && $_SESSION[__CLASS__instanceof Net_LDAP2_SchemaCache{
  125.             return $_SESSION[__CLASS__];
  126.         else {
  127.             return false;
  128.         }
  129.     }
  130.  
  131.     /**
  132.     * Store the schema object in session
  133.     *
  134.     * @return true|Net_LDAP2_Error
  135.     */
  136.     public function storeSchema($schema{
  137.         // Just dump the given object into the session
  138.         // unless in loadSchema(), it is important to only return
  139.         // Net_LDAP2_Error objects if something crucial went wrong.
  140.         // If you feel that you want to return an error object, be sure
  141.         // that you have read the comments in Net_LDAP2_SchemaCache.interface.php
  142.         // or you will seriously hurt the performance of your application!!!!
  143.         $_SESSION[__CLASS__$schema;
  144.         return true;
  145.     }
  146. }
  147.  
  148.  
  149. // Ok, now we have our finished cache object. Now initialize and register it
  150. // the usual way:
  151. $mySchemaCache = new MySessionSchemaCache();
  152.  
  153. $ldap          Net_LDAP2::connect($ldap_config);
  154. if (Net_LDAP2::isError($ldap)) {
  155.     die('BIND FAILED: '.$ldap->getMessage());
  156. }
  157.  
  158. $res $ldap->registerSchemaCache($mySchemaCache);
  159. if (Net_LDAP2::isError($res)) {
  160.     die('REGISTER CACHE FAILED: '.$res->getMessage());
  161. }
  162.  
  163. // Now, the Schema is cached in the PHP session :)

Documentation generated on Mon, 11 Mar 2019 16:03:55 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.