Каков наилучший способ настроить libphonenumber (PHP) вручную без Composer?

Из-за некоторых ограничений я не могу установить libphonenumber через composer, поэтому я вручную добавил его в каталог lib моего проекта.
Я получаю следующую ошибку, когда пытаюсь использовать ее через ручную настройку:
Неустранимая ошибка PHP: класс ‘libphonenumber \ CountryCodeToRegionCodeMap’ не найден в /home/cellulant/CODE/MSISDNVALIDATIONAPI/lib/libphonenumber/src/PhoneNumberUtil.php в строке 404

Это, несмотря на то, что CountryCodeToRegionMap.php можно найти в libphonenumber / ЦСИ каталог

libphonenumber каталог находится в моем проекте Lib каталог.
Ниже моя структура каталогов

├── docs
├── index.php
├── lib
│   └── libphonenumber
│       ├── composer.json
│       ├── docs
│       │    ...
│       ├── LICENSE
│       ├── METADATA-VERSION.txt
│       ├── README.md
│       └── src
│           ...

В моем index.php у меня есть эти:

<?php

include "lib/libphonenumber/src/PhoneNumberUtil.php";

$num = "0234567787";

try
{
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();

$numberProto = $phoneUtil->parse($num, "US");
var_dump($numberProto);
}
catch (Exception $ex)
{
echo "Exception: " . $ex->getMessage() . "\n";
}

2

Решение

Насколько я знаю, у вас есть 3 варианта:

  1. Вручную требуйте / включите все необходимые классы. Вы уже включили «PhoneNumberUtil.php», но вы также должны включить «CountryCodeToRegionCodeMap.php»

  2. Реализуйте свой собственный автозагрузчик в php:
    http://php.net/manual/en/language.oop5.autoload.php

  3. Используйте автозагрузчик композитора. Если у вас нет доступа к оболочке, вы можете запускать команды локально и передавать все на ваш веб-хостинг.

0

Другие решения

Согласно документу libphonenumber-php, вы также можете использовать любой PSR4 (http://www.php-fig.org/psr/psr-4/) совместимый автозагрузчик, если вы решите использовать его без композитора.

Автор этой версии @giggsey говорит, что вам может понадобиться использовать библиотеку Locale (https://github.com/giggsey/Locale). Это заменяет расширение php-intl

Учитывая вашу структуру каталогов, ваш автозагрузчик (например, autoload.php) и предполагая, что он находится в вашем каталоге src /, может выглядеть так:

spl_autoload_register(function ($class) {

//namespace prefix
$prefix = 'libphonenumber';

// base directory for the namespace prefix
$base_dir = __DIR__ . '/../lib/libphonenumber/src/';

// does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// no, move to the next registered autoloader
return;
}

// get the relative class name
$relative_class = substr($class, $len);

// replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

// if the file exists, require it
if (file_exists($file)) {
require $file;
}
});

Затем вы можете импортировать его, используя …

require __DIR__ . "autoload.php";
try
{
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
//code...
}
catch(NumberParseException $ex)
{
//code ...
}

Вам также может понадобиться загрузить библиотеку Locale в autoload.php аналогичным образом.
Libphonenumber-php требует расширения mbstring.

Посмотрите на примеры в ..

libphonenumber/README
libphonenumber/docs/
0

По вопросам рекламы [email protected]