2017-05-13 24 views
2

いくつかの制約のため、私は作曲家経由でlibphonenumberをインストールすることができないので、手動でプロジェクトのlibディレクトリに追加しました。
私は手動設定を経由して、それを使用しようとすると、私は次のエラーを取得しています:
PHPの致命的なエラー:クラスのlibphonenumberの\のCountryCodeToRegionCodeMap '/ホーム/ cellulant/CODE/MSISDNVALIDATIONAPI/libに/ libphonenumber/srcに/中には見ら​​れませんPhoneNumberUtil.phpライン上の404Composerを使用せずに手動でlibphonenumber(PHP)を設定する最良の方法は何ですか?

これを、CountryCodeToRegionMap.phpはlibphonenumber/srcにディレクトリで見つけることができるという事実にもかかわらず libphonenumberディレクトリには、私のプロジェクトのlibに DIRECである

トリー。限り私はあなたを知っているように3つのオプション

<?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"; 
} 

答えて

0

ています:手動で必要

  1. を 次は私のindex.phpで私のディレクトリ構造

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

    ですが、私はこれらを持っています/すべての必要なクラスを含める。あなたはすでに「PhoneNumberUtil.php」を含めましたが、あなたはまた、PHPで独自のオートローダを実装する「CountryCodeToRegionCodeMap.php」

  2. を含める必要があります。 http://php.net/manual/en/language.oop5.autoload.php

  3. が作曲オートローダを使用してください。あなたがシェルアクセスを持っていない場合は、ローカルのコマンドを実行し、あなたのウェブホストにすべてをオーバーFTP転送することができます

0

libphonenumber-PHPのドキュメントを従えば、あなたがすることを決定した場合、あなたはまた、任意のPSR4(http://www.php-fig.org/psr/psr-4/)に準拠しオートローダーを使用することができます作曲家なしでこれを使用してください。

このバージョン@giggseyの作成者は、ロケールライブラリ(https://github.com/giggsey/Locale)を使用する必要があると言います。これはあなたのディレクトリ構造、オートローダ(例えばautoload.php)指定した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でロケールライブラリを読み込む必要があるかもしれません。 libphonenumber-phpにはmbstringの拡張が必要です。

の例を見てみましょう。..

libphonenumber/README 
libphonenumber/docs/ 
関連する問題