powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите составить autoload.php
6 сообщений из 6, страница 1 из 1
Помогите составить autoload.php
    #40049158
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключаю клиентскую библиотеку Google API версии 2.8.3 .
Composer и прочее не использую, размещаю все вручную.
Структура каталогов следующая:
/custom/lib/php/GoogleAPI - базовый каталог, в котором лежит библиотека (без /src/), credentials.json и autoload.php
./AccessToken/*.php
./AuthHandler/*.php
./Service/*.php
...
./Client.php
./Service.php
...
./aliases.php
./autoload.php

Использовать планирую следующим образом:
Код: php
1.
2.
3.
require '/custom/lib/php/GoogleAPI/autoload.php';
...
$client = new Google_Client();



Не могу сообразить, как должен быть устроен autoload.php.
Пока сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($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';

    require __DIR__ . '/' . $fileName;
}
spl_autoload_register('autoload');


Но это не работает, добавляет лишний подкаталог Google, например вместо /custom/lib/php/GoogleAPI/Client.php ищет /custom/lib/php/GoogleAPI/Google/Client.php.
...
Рейтинг: 0 / 0
Помогите составить autoload.php
    #40049161
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал такой загрузчик:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function google_api_autoload($className)
{
    $ps = trim(' \\ ');
    $className = ltrim($className, $ps);
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, $ps)) {  
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace($ps, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
    if (substr($fileName, 0, 7) == 'Google/') $fileName = __DIR__ . DIRECTORY_SEPARATOR . substr($fileName, 7);
print "\* $fileName \*\n";
    require $fileName;
}
spl_autoload_register('google_api_autoload');


Когда пытаюсь обратится к классу ($client = new Google_Client()), путь к нему проставляется правильно.
Но выдается ошибка уже уровнем выше: PHP Fatal error: Class 'Google_Client' not found
В библиотеке класс объявлен так:
Код: php
1.
2.
3.
namespace Google;
...
class Client



Версия PHP 5.4.45, неймспейсы поддерживаются.
Да и клиентская библиотека совместима с версией 5.4 и выше.
...
Рейтинг: 0 / 0
Помогите составить autoload.php
    #40049162
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И может быть кто посоветует PHP-библиотеку для гуглодокументов другого типа?
Указанная библиотека использует мою учетную запись, требует включения API, использования токена. Самый главный ее недостаток — она не полностью автоматическая, при ее использовании нужно вручную подтвердить (в браузере) доступ токена к ресурсам.
Я бы хотел использовать полностью автоматическую библиотеку, которая бы самостоятельно авторизовалась под указанными учетными данными и получала доступ к тем документам, к которым он был предоставлен.
...
Рейтинг: 0 / 0
Помогите составить autoload.php
    #40049165
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Но выдается ошибка уже уровнем выше: PHP Fatal error: Class 'Google_Client' not found

Если вместо $client = new Google_Client использовать $client = new Google\Client, то работает.
Но везде в библиотеки используется указание класса через символ подчеркивания.
Не подскажите, как модифицировать автозагрузчик или код инициализации, чтобы не переписывать код всей библиотеки?
...
Рейтинг: 0 / 0
Помогите составить autoload.php
    #40049402
Дормедонт Евлампиевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите составить autoload.php
    #40049460
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дистрибутиве есть файл aliases.php, в котором альясы уже объявлены.
Подключил, заработало.
Но тогда непонятно, зачем так сделано? Почему бы сразу не вызывать классы с использованием бэкслеша?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите составить autoload.php
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]