Из-за некоторых ограничений я не могу установить 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";
}
Насколько я знаю, у вас есть 3 варианта:
Вручную требуйте / включите все необходимые классы. Вы уже включили «PhoneNumberUtil.php», но вы также должны включить «CountryCodeToRegionCodeMap.php»
Реализуйте свой собственный автозагрузчик в php:
http://php.net/manual/en/language.oop5.autoload.php
Используйте автозагрузчик композитора. Если у вас нет доступа к оболочке, вы можете запускать команды локально и передавать все на ваш веб-хостинг.
Согласно документу 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/