ホームページ > バックエンド開発 > PHPチュートリアル > PHP 拡張モジュールは、バイナリ データを Erlang ext term 形式 (term_to_binary によって生成) で解凍します。

PHP 拡張モジュールは、バイナリ データを Erlang ext term 形式 (term_to_binary によって生成) で解凍します。

WBOY
リリース: 2016-06-13 12:34:53
オリジナル
1358 人が閲覧しました

PHP 拡張モジュールは、Erlang ext term 形式 (term_to_binary によって生成) でバイナリ データを解凍します

1. 記事「Erlang の Term_to_Binary データ パケット メカニズムの予備調査」では、Erlang 拡張用語形式 (Erlang 外部用語形式) バイナリ

の役割が紹介されています。 一部の学生は、term_to_binary 関数を使用して Erlang データをパッケージ化し、バイナリ形式でデータベースに保存し、PHP を使用して読み取って PHP 配列に解凍したいと考えています。
上記のアプリケーション シナリオで発生する問題を解決するには、
peb (Php-Erlang Bridge) 拡張機能を参照して、erlang:binary_to_term/1 関数に似たこのバイナリ拡張機能、
を作成しました。 これは、binary_to_term の PHP バージョンとして理解できます。


2. バイナリ拡張の概要


2.1. このバイナリ拡張機能は次の 3 つの関数をエクスポートします:

    array binary_to_term(string $binary) は、アンパックされた配列を返します。
  1. int binary_errno () は、binary_to_term への最後の呼び出しによって生成されたエラー コードを返します。 0 はエラーがないことを意味し、1 はサポートされていないデータ型がバイナリ コンテンツに含まれていることを意味します。
  2. string binary_error () binary_to_term への最後の呼び出しによって生成されたエラー メッセージを返します。エラーがない場合は空を返します。
2.2. バイナリ拡張モジュールのダウンロード アドレス:

http://download.csdn.net/download/u011471961/6447631

3. バイナリ拡張機能のインストール

*nux にインストール:


ステップ 1: ----------
binary.zip を解凍します
cd ./バイナリ
phpize または phpize5



ステップ 2: ----------
configureを実行する前に、Erlangのインストールディレクトリとphp-configのパスを確認してください。以下のconfigureは一例であり、実際のパスに応じて変更できます。
Linux にインストールします:
./configure CC="gcc -L/usr/local/lib/erlang/lib/erl_interface-3.7.11/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.11/include" -- Enable-binary --with-php-config=/usr/local/php/bin/php-config
または:
./configure CC="gcc -L/usr/local/lib/erlang/lib/erl_interface-3.7.11/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.11/include" -- Enable-binary --with-php-config=/usr/bin/php-config5
Apple コンピュータにインストールします:
sudo MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" ./configure CC="gcc -m32 -L/usr/local/lib/erlang/lib/erl_interface-3.7.6/lib -I/usr/local/lib/erlang/lib/erl_interface-3.7.6/include" --enable-binary



ステップ 3: ----------
作る



ステップ 4: ----------
テストを作成します



ステップ 5: ----------
インストールを行う



ステップ 6: ----------
php.ini ファイルを変更します:
拡張子=binary.so
または:
拡張子=/path/to/binary.so



ステップ 7: ----------
php-cgi または apache
を再起動します。


ステップ 8: ----------
phpinfo() 関数またはコマンド (php -m) を通じてバイナリ モジュールがロードされているかどうかを確認します。



4. バイナリ拡張の適用例


4.1. mysql データテーブルを作成する

CREATE TABLE IF NOT EXISTS `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bin` varbinary(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ログイン後にコピー

4.2. Erlang 側でのデータの書き込み

test() ->
    Data = [{name, rolong},{phone, 888888}],
    Bin = term_to_binary(Data),
    %% 写入数据库的接口依自己情况而定
    db:execute(<<"insert test(bin) values(~s);">>, [Bin]).
ログイン後にコピー

4.3. PHP で PHP 配列を読み取り、解凍します

<?php
    $sql = "select `bin` from test order by id desc limit 1";
    %% 读取数据库的接口依自己情况而定
    $bin = Db::getInstance()->getOne($sql);
    $data = binary_to_term($bin);
    echo '<pre class="brush:php;toolbar:false">';
    var_dump($data);
    echo '
';
ログイン後にコピー
出力

array(1) {
  [0]=>
  array(2) {
    [0]=>
    array(2) {
      [0]=>
      string(4) "name"
      [1]=>
      string(6) "rolong"
    }
    [1]=>
    array(2) {
      [0]=>
      string(5) "phone"
      [1]=>
      int(888888)
    }
  }
}
ログイン後にコピー

4. 概要

バイナリ拡張モジュールでは、あまり一般的に使用されない一部のデータ型は当面サポートされていません。特別なニーズがある学生は、それらを変更してソース コードに実装できます。

Erlang は、データのパケット化とアンパックのための C インターフェイスを提供します。を参照してください。 http://www.erlang.org/doc/apps/erl_interface/index.html
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート