背景:安裝完redis之後,需要安裝phpredis擴展,才能讓php操作redis;本機有多個php版本,安裝過程中遇到的坑分享一下。
一 下載
git上下載redis的擴充包
- git clone https://github.com/nicolasff/phpredis
-
複製程式碼 二掛載和configure
- 在shell中輸入phpize 【注意:多個php版本的時間需要指定】
./configure
複製程式碼
【phpize是用來擴充php擴充模組的,透過phpize可以建立php的外掛模組】
- 注意:(phpize 如果包含多個php,必須指定位置)
-
-
-
-
- cuihuan:phpredis cuixiaohuan$ ../php/bin/phpize
- Configuring for :
- PHP Api Version: 20121113
Zend Module Api No: 20121212 Zend Extension Api No: 220121212 Cannot find autoconf.Opindoutoq. able. Then , rerun this script.
複製程式碼
報錯的話需要安裝:brew install autoconf [phpize 報錯] 🎜>-
-
-
-
-
-
-
[work@cuixiaozhuai phpredis]$ ../php/bin/phpize Configuring for:PHP Api Version: 20041225 Zendend Module Api No120 Extension Api No: 220060519[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
複製程式碼
- 三編譯安裝
- make 之後最好make test
- make install
-
-
-
-
- cuihuan:phpredis cuixiaohuan$ make
。 。 。 Build complete. Don't forget to run 'make test'.
cuihuan:phpredis cuixiaohuan$ make testcuihuan:Dmmm 複製程式碼
四問題修復
【已修復,但原因可能不太準確】 make編譯報錯-
-
-
-
- .libs/redis_cluster.o(.data.rel.local 0x0) : In function `ht_free_seed':
- /home/work/thirdparty/php5/php5/phpredis/redis_cluster.c:226: multiple definition of `arginfo_scan'
- .libs/redis.o(.data.rel. local 0xe0):/home/work/thirdparty/php5/php5/p hpredis/redis.c:452: first defined here
- /usr/bin/ld: Warning: size of symbol `arginfo_scan' changed from 160 in . libs/redis.o to 200 in .libs/redis_cluster.o
- .libs/redis_cluster.o(.data.rel.local 0xe0): In function `create_cluster_context':
- /home/work/thirdparty/php55 /php5/phpredis/redis_cluster.c:276: multiple definition of `arginfo_kscan'
.libs/redis.o(.data.rel.local 0x0):/home/work/thirdparty/php5/php5/phpredis/redis .c:364: first defined here collect2: ld returned 1 exit status make: *** [redis.la] Error 1
複製程式碼>
最初以為是php多個版本產生install問題,採用./configure 指定php版本,指定php位置。 但是效果還是有問題。 最後透過修改redis_cluester.c 中,註解掉了這兩個重複的
-
-
-
- 40
-
- 41 /* Argument info for HSCANment info for HSCANment 、HS 🎜>
- 45 ZEND_ARG_INFO(0, str_pattern)
-
- 46 ZEND_ARG_INFO(0, i_count)
-
- 47 ZEND_END_ARG_INFO( > 49
-
- 50 /* Argument infor for SCAN */
-
- 51 /*
-
- 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_scan, 0, 0,533, 53, 53,03_scan> ZEND_ARG_INFO(1, i_iterator)
-
- 54 ZEND_ARG_INFO(0, str_node)
-
- 55 ZEND_ARG_INFO(0, str_patEND)
- 55 ZEND_ARG_INFO(0, str_patEND)
- 57 ZEND_END_ARG_INFO();
-
- 58 */
-
-
-
-
- 複製程式碼
-
- 五簡單測試
-
$redis = new Redis();
- $conn = $redis->connect('127.0.0.1',6379);
-
- echo "redis pass and status show";
- var_dump($redis->ping());
-
- $redis->set('test_key',' test_value');
- echo "test set 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 'is exist'.$redis->exists('test_60s');
- echo 'not has value'.$redis->get('test_60s');
- $redis->delete ('test_key','test_60s');
-
複製程式碼
個人小站原文連結
|