1 <?php 2 3 // constants are slow, so we use as few as possible 4 if (!defined('HTMLPURIFIER_PREFIX')) { 5 define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/..')); 6 } 7 8 // accomodations for versions earlier than 5.0.2 9 // borrowed from PHP_Compat, LGPL licensed, by Aidan Lister <aidan@php.net> 10 if (!defined('PHP_EOL')) { 11 switch (strtoupper(substr(PHP_OS, 0, 3))) { 12 case 'WIN': 13 define('PHP_EOL', "\r\n"); 14 break; 15 case 'DAR': 16 define('PHP_EOL', "\r"); 17 break; 18 default: 19 define('PHP_EOL', "\n"); 20 } 21 } 22 23 /** 24 * Bootstrap class that contains meta-functionality for HTML Purifier such as 25 * the autoload function. 26 * 27 * @note 28 * This class may be used without any other files from HTML Purifier. 29 */ 30 class HTMLPurifier_Bootstrap 31 { 32 33 /** 34 * Autoload function for HTML Purifier 35 * @param string $class Class to load 36 * @return bool 37 */ 38 public static function autoload($class) 39 { 40 $file = HTMLPurifier_Bootstrap::getPath($class); 41 if (!$file) { 42 return false; 43 } 44 // Technically speaking, it should be ok and more efficient to 45 // just do 'require', but Antonio Parraga reports that with 46 // Zend extensions such as Zend debugger and APC, this invariant 47 // may be broken. Since we have efficient alternatives, pay 48 // the cost here and avoid the bug. 49 require_once HTMLPURIFIER_PREFIX . '/' . $file; 50 return true; 51 } 52 53 /** 54 * Returns the path for a specific class. 55 * @param string $class Class path to get 56 * @return string 57 */ 58 public static function getPath($class) 59 { 60 if (strncmp('HTMLPurifier', $class, 12) !== 0) { 61 return false; 62 } 63 // Custom implementations 64 if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) { 65 $code = str_replace('_', '-', substr($class, 22)); 66 $file = 'HTMLPurifier/Language/classes/' . $code . '.php'; 67 } else { 68 $file = str_replace('_', '/', $class) . '.php'; 69 } 70 if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) { 71 return false; 72 } 73 return $file; 74 } 75 76 /** 77 * "Pre-registers" our autoloader on the SPL stack. 78 */ 79 public static function registerAutoload() 80 { 81 $autoload = array('HTMLPurifier_Bootstrap', 'autoload'); 82 if (($funcs = spl_autoload_functions()) === false) { 83 spl_autoload_register($autoload); 84 } elseif (function_exists('spl_autoload_unregister')) { 85 if (version_compare(PHP_VERSION, '5.3.0', '>=')) { 86 // prepend flag exists, no need for shenanigans 87 spl_autoload_register($autoload, true, true); 88 } else { 89 $buggy = version_compare(PHP_VERSION, '5.2.11', '<'); 90 $compat = version_compare(PHP_VERSION, '5.1.2', '<=') && 91 version_compare(PHP_VERSION, '5.1.0', '>='); 92 foreach ($funcs as $func) { 93 if ($buggy && is_array($func)) { 94 // :TRICKY: There are some compatibility issues and some 95 // places where we need to error out 96 $reflector = new ReflectionMethod($func[0], $func[1]); 97 if (!$reflector->isStatic()) { 98 throw new Exception( 99 'HTML Purifier autoloader registrar is not compatible 100 with non-static object methods due to PHP Bug #44144; 101 Please do not use HTMLPurifier.autoload.php (or any 102 file that includes this file); instead, place the code: 103 spl_autoload_register(array(\'HTMLPurifier_Bootstrap\', \'autoload\')) 104 after your own autoloaders.' 105 ); 106 } 107 // Suprisingly, spl_autoload_register supports the 108 // Class::staticMethod callback format, although call_user_func doesn't 109 if ($compat) { 110 $func = implode('::', $func); 111 } 112 } 113 spl_autoload_unregister($func); 114 } 115 spl_autoload_register($autoload); 116 foreach ($funcs as $func) { 117 spl_autoload_register($func); 118 } 119 } 120 } 121 } 122 } 123 124 // vim: et sw=4 sts=4
title
Description
Body
title
Description
Body
title
Description
Body
title
Body