Centosの下でphpにRedis拡張とコンパイルの問題解決をインストールする

2484 ワード

1、第一歩はもちろんgithubに行ってソースコードをダウンロードして、パラメータ--no-check-certificateを加えることを覚えていて、さもなくばhttps検査は間違いがあります
wget https://github.com/phpredis/phpredis/archive/develop.zip --no-check-certificate
2、ダウンロードしたパッケージを解凍し、
unzip develop cd phpredis-develop/
3、構成とコンパイル、注意phpのインストールディレクトリの位置に変更する
~/php/bin/phpize  ./configure --with-php-config=~/php/bin/php-config  make && make install
通常はsoファイルを編集しphpの拡張ディレクトリに置くべきですが、コンパイル中にエラーが発生しました.
.libs/redis_cluster.o:(.data.rel.local+0x0): multiple definition of `arginfo_kscan'
.libs/redis.o:(.data.rel.local+0xa0): first defined here
.libs/redis_cluster.o:(.data.rel.local+0xe0): multiple definition of `arginfo_scan'
.libs/redis.o:(.data.rel.local+0x0): first defined here

エラーはクラスタのコードの問題です.どうせ私の環境ではクラスタが使えないので、このコードを注釈しましょう.
vim redis_cluster.c
41行を見つけて、この2つのコードを注釈します.
/* Argument info for HSCAN, SSCAN, HSCAN */
/*ZEND_BEGIN_ARG_INFO_EX(arginfo_kscan, 0, 0, 2)
    ZEND_ARG_INFO(0, str_key)
    ZEND_ARG_INFO(1, i_iterator)
    ZEND_ARG_INFO(0, str_pattern)
    ZEND_ARG_INFO(0, i_count)
ZEND_END_ARG_INFO();*/

/* Argument infor for SCAN */
/*ZEND_BEGIN_ARG_INFO_EX(arginfo_scan, 0, 0, 2)
    ZEND_ARG_INFO(1, i_iterator)
    ZEND_ARG_INFO(0, str_node)
    ZEND_ARG_INFO(0, str_pattern)
    ZEND_ARG_INFO(0, i_count)
ZEND_END_ARG_INFO();*/

保存後make&&make installを続行します.今回は呼び出しエラーです.
phpredis-develop/redis_cluster.c:177: error: 'arginfo_scan' undeclared here (not in a function)
phpredis-develop/redis_cluster.c:178: error: 'arginfo_kscan' undeclared here (not in a function)

ファイルの編集を続行し、次の4行の呼び出しコードを削除します.
PHP_ME(RedisCluster, evalsha, NULL, ZEND_ACC_PUBLIC)
//PHP_ME(RedisCluster, scan, arginfo_scan, ZEND_ACC_PUBLIC)
//PHP_ME(RedisCluster, sscan, arginfo_kscan, ZEND_ACC_PUBLIC)
//PHP_ME(RedisCluster, zscan, arginfo_kscan, ZEND_ACC_PUBLIC)
//PHP_ME(RedisCluster, hscan, arginfo_kscan, ZEND_ACC_PUBLIC)

OK、保存が終了してからmake&make install、今回は成功しました.
戻ってphp/extディレクトリを表示します.redisがあります.soが拡張され、php-fpmを再起動してphpinfo()を見ると、redis情報が表示されます.
Redis Support	enabled
Redis Version	2.2.5

コードテストを書いてみましょう.
$redis = new Redis();
$conn = $redis->connect('127.0.0.1',6379);
var_dump($redis->info());

ページにはredisの情報が表示されるはずです