背景: Redis をインストールした後、PHP で Redis を操作できるようにするために phpredis 拡張機能をインストールする必要があります。このマシンには複数の PHP バージョンがあります。インストール プロセス中に発生する落とし穴について説明します。
1 ダウンロード
git で Redis 拡張パッケージをダウンロードします
- git clone https://github.com/nicolasff/phpredis
-
コードをコピーします
2 マウントして設定します
シェルに phpize と入力します [注意: 複数の php バージョンを指定する必要があります]
[phpize は php 拡張モジュールを拡張するために使用され、php は phpize を通じて構築できますプラグインモジュール】
注: (複数の php が含まれる場合、phpize は場所を指定する必要があります)
- cuihuan:phpredis cuixiaohuan$ ../php/bin/phpize
- 構成:
- PHP API バージョン: 20121113
- Zend モジュール API 番号: 20121212
- Zend Extension API No: 220121212
- autoconf が見つかりません。autoconf のインストールと
- $PHP_AUTOCONF 環境変数を確認してください。それから、このスクリプトを再実行してください。エラーを報告してください。それ以外の場合は、phpize
-
[work@cuixiaozhuai phpredis] $ ../php/bin/phpize 構成: PHP API バージョン: 20041225Zend モジュール API 番号: 20060613 Zend 拡張 API 番号: 22006 0519 [work@cuixiaozhuai phpredis]$ ./configure --with-php -config=/home/work/thirdparty/php5/bin/php-config
-
- コードをコピー
-
-
- php のバージョンが複数ある場合は、設定ファイルを指定する必要があります
-
-
./configure -- with-php-config=/home/work/thirdparty/php5/bin/php-config
コードをコピー
3 つのコンパイルとインストール
make の後は、make test - make install
-
cuihuan:phpredis cuixiaohuan$ make を行うのが最善です。 。 。 ビルドが完了しました。 「make test」を実行することを忘れないでください。
cuihuan:phpredis cuixiaohuan$ make test cuihuan:phpredis cuixiaohuan$ make install
-
-
- コードをコピー
-
- 4 つの問題修正
- 【修正されましたが、理由は正確ではない可能性があります】
- コンパイルエラーを起こす
-
.libs/redis_cluster.o(.data.rel.local+0x0): 関数 `ht_free_seed': /home/work/ thirdparty/php5/php5/phpredis/redis_cluster.c:226: `arginfo_scan' の複数の定義.libs/redis.o(.data.rel.local+0xe0):/home/work/thirdparty/php5/php5/p hpredis/redis.c:452: 最初にここで定義されました /usr/bin/ld: 警告: シンボル `arginfo_scan' のサイズが .libs/redis.o の 160 から .libs/redis_cluster.o .libs/ の 200 に変更されましたredis_cluster.o(.data.rel.local+0xe0): 関数 `create_cluster_context' 内:/home/work/thirdparty/php5/php5/phpredis/redis_cluster.c:276: `arginfo_kscan' の複数の定義 .libs/ redis.o(.data.rel.local+0x0):/home/work/thirdparty/php5/php5/phpredis/redis.c:364: ここで最初に定義されました collect2: ld が 1 終了ステータスを返しました- make: *** [redis.la] エラー 1
-
-
-
- コードをコピー
-
-
- 最初は、複数のバージョンの PHP によって生成されたインストールの問題だと思いました。PHP のバージョンと PHP の場所を指定するには、./configure を使用します。
- しかし、その効果にはまだ問題があります。
- 最後に、redis_cluester.c を変更することで、これら 2 つの重複がコメント化されました
40 41 /* HSCAN、SSCAN、HSCAN の引数情報 */
42 /*ZEND_BEGIN_ARG_INFO_EX(arginfo_kscan, 0, 0 、2 ) 43 ZEND_ARG_INFO(0, str_key)
- 44 ZEND_ARG_INFO(1, i_iterator)
-
- 45 ZEND_ARG_INFO(0, str_pattern)
-
- 46 ZEND_ARG_INFO(0, i_count)
-
- 47 Z END_END_ARG_INFO();
-
- 48 * /
-
- 49
-
- 50 /* SCAN の引数情報 */
-
- 51 /*
-
- 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_scan, 0, 0, 2)
-
- 53 ZEND_ARG_INFO(1, i_iterator)
-
- 54 ZEND_ARG_INFO(0, str_node )
-
-
-
- 55 ZEND_ARG_INFO (0, Str_pattern)
-
- 56 ZEND_ARG_INFO (0, I_Count)
-
- 57 ZEND_END_ARG_INFO ();五简单测试
- $redis = new Redis();
- $conn = $redis->connect('127.0.0.1',6379);
-
- echo "redis pass and status show< /br>";
- var_dump($redis->ping());
-
- $redis->set('test_key','test_value');
- echo "テスト セット val=".$redis-> get('test_key')."";
- $redis->setnx('unique_key',"unique_val");
- $redis->setnx('unique_key',"unique_val_2");
- echo $redis->get("unique_key");
- sleep(60);
- echo '存在します'.$redis->exists('test_60s');
- echo '値がありません'.$ redis->get('test_60s');
- $redis->delete('test_key','test_60s');
-
复制代
个人小站翻訳链接
|