Как использовать библиотеку PHP с пространством имен без компоновщика в качестве зависимости (PSR-0)?

Мне нужно использовать некоторые библиотеки PHP с зависимостями, но у меня есть некоторые ограничения на веб-сервере клиента. Это управляемый веб-сервер, и я не могу использовать консоль, например, через SSH.

Итак, как мне теперь использовать эти библиотеки без Composer?
Могу ли я создать несколько каталогов вручную и какие каталоги или пути мне нужно создать? Кроме того, что мне нужно для создания, так что автозагрузка и пространство имен работают?

Могу ли я создать autoload.php как-то вручную и каково содержимое файла?

Ответ 1

Это возможно с помощью простого автозагрузчика, и это не так сложно сделать:

function __autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    // $fileName .= $className . '.php'; //sometimes you need a custom structure
    //require_once "library/class.php"; //or include a class manually
    require $fileName;

}

Но иногда вам нужно настроить $fileName, чтобы он работал со всеми библиотеками. Это зависит от стандарта автозагрузки и того, как названы имена классов библиотек. Иногда вам нужно разбить имя класса на _ и использовать первый элемент для имени directcotry и добавить его также к имени класса. У меня была, например, вторая библиотека с классом типа Library_Parser, но структура была Library/library-parser.php.

Первая библиотека работала напрямую с указанным выше кодом, и все классы были автоматически загружены.

Код был взят из http://www.sitepoint.com/autoloading-and-the-psr-0-standard/, но мне пришлось исправить некоторые части кода (дополнительные символы подчеркивания и обратные косые черты). Я использовал стандартное решение PSR-0.