没有Composer手动设置libphonenumber(PHP)的最佳方法是什么?

时间:2017-05-13 20:31:28

标签: php libphonenumber

由于一些限制,我无法通过composer安装libphonenumber,因此我手动将其添加到项目的lib目录中。
当我尝试通过手动设置使用时,我收到以下错误:
PHP致命错误:第404行的/home/cellulant/CODE/MSISDNVALIDATIONAPI/lib/libphonenumber/src/PhoneNumberUtil.php中找不到类'libphonenumber \ CountryCodeToRegionCodeMap

尽管可以在 libphonenumber / src 目录中找到CountryCodeToRegionMap.php

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 个答案:

答案 0 :(得分:1)

据我所知,你有3种选择:

  1. 手动要求/包含所有需要的课程。您已经包含了#34; PhoneNumberUtil.php&#34;,但您还应该包含&#34; CountryCodeToRegionCodeMap.php&#34;

  2. 在php中实现自己的自动加载器: http://php.net/manual/en/language.oop5.autoload.php

  3. 使用composer自动加载器。如果您没有shell访问权限,则可以在本地运行命令并将所有内容ftp到您的webhost

答案 1 :(得分:1)

根据libphonenumber-php文档,如果你决定在没有作曲家的情况下使用它,你也可以使用任何PSR4(http://www.php-fig.org/psr/psr-4/)兼容的自动加载器。

此版本的作者@giggsey表示您可能需要使用区域设置库(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 ...
}

您可能还需要在autoload.php中加载Locale库。 libphonenumber-php需要mbstring扩展名。

看看......中的例子。

libphonenumber/README
libphonenumber/docs/