HTML Purifier не работает с пространствами имен PHP, поэтому замена \\
на /
не даст вам результатов, которые вы ищете.Ваша логика автозагрузки пытается загрузить класс HTMLPurifier_Config
из файла htmlpurifier_config.php
- так что вам нужно примерно так:
function autoloadHtmlPurifier($class) {
require DOC_ROOT . '/system/libraries/htmlpurifier/library/'
. str_replace('_', '/', $class) . '.php';
}
spl_autoload_register('autoloadHtmlPurifier');
(обратите внимание, что эта функция не использует strtolower()
изаменяет _
на /
.)
Но, глядя на реализацию автозагрузки HTML Purifier :
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;
}
... есть хороший шанс, что простоезамена по-прежнему не будет работать правильно из-за крайнего случая языкового класса.Но вы можете попробовать это:
function autoloadHtmlPurifier($class) {
require DOC_ROOT . '/system/libraries/htmlpurifier/library/'
. str_replace('_', '/', $class) . '.php';
}
spl_autoload_register('autoloadHtmlPurifier');
spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'));
, который использует ваш собственный автозагрузчик для загрузки класса HTMLPurifier_Bootstrap
, так что вам не нужно включать его в require
, но все же есть преимущество использованияканонический автозагрузчик для HTML Purifier.
Предостережение
При этом в любом случае недостатком является то, что если HTML Purifier когда-либо переключится на пространства имен, ваш автозагрузчик для него сломается.Я бы действительно предложил вам придерживаться подхода require_once(DOC_ROOT . '/system/libraries/htmlpurifier/library/HTMLPurifier.auto.php')
или установить HTML Purifier, используя composer
, который позаботится об автоматической загрузке этой библиотеки (и, возможно, других) для вас :
Для библиотек, в которых указана информация об автозагрузке, Composer создает файл vendor / autoload.php.Вы можете просто включить этот файл и начать использовать классы, предоставляемые этими библиотеками, без дополнительной работы:
require __DIR__ . '/vendor/autoload.php';