Blame view

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