HTMLPurifier/Bootstrap.php Quellcode

Bootstrap.php
gehe zur Dokumentation dieser Datei
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 
31 {
32 
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 
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 
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




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.