【redis學習二】多php版本下phpredis擴充安裝

來源:互聯網
上載者:User

背景:安裝完redis之後,需要安裝phpredis擴充,才能讓php操作redis;本機有多個php版本,安裝過程中遇到的坑分享一下。

一 下載

git上下載redis的擴充包

  1. git clone https://github.com/nicolasff/phpredis
複製代碼二 掛載和configure

在shell中輸入 phpize 【注意:多個php版本的時候需要指定】

  1. ./configure
複製代碼

【phpize是用來擴充php擴充模組的,通過phpize可以建立php的外掛模組】

注意:(phpize 如果包含多個php,必須指定位置)

  1. cuihuan:phpredis cuixiaohuan$ ../php/bin/phpize
  2. Configuring for:
  3. PHP Api Version: 20121113
  4. Zend Module Api No: 20121212
  5. Zend Extension Api No: 220121212
  6. Cannot find autoconf. Please check your autoconf installation and the
  7. $PHP_AUTOCONF environment variable. Then, rerun this script.
複製代碼

報錯的話需要安裝:brew install autoconf [phpize 報錯] 否則沒有phpize

  1. [work@cuixiaozhuai phpredis]$ ../php/bin/phpize
  2. Configuring for:
  3. PHP Api Version: 20041225
  4. Zend Module Api No: 20060613
  5. Zend Extension Api No: 220060519
  6. [work@cuixiaozhuai phpredis]$ ./configure --with-php-config=/home/work/thirdparty/php5/bin/php-config
複製代碼

當存在多個版本的php的時候,需要指定設定檔

  1. ./configure --with-php-config=/home/work/thirdparty/php5/bin/php-config
複製代碼三 編譯和安裝

make 之後最好make test
make install

  1. cuihuan:phpredis cuixiaohuan$ make
  2. 。。。
  3. Build complete.
  4. Don't forget to run 'make test'.
  5. cuihuan:phpredis cuixiaohuan$ make test
  6. cuihuan:phpredis cuixiaohuan$ make install
複製代碼四 問題修複

【已修複,但是原因可能不太準確】
make編譯報錯

  1. .libs/redis_cluster.o(.data.rel.local+0x0): In function `ht_free_seed':
  2. /home/work/thirdparty/php5/php5/phpredis/redis_cluster.c:226: multiple definition of `arginfo_scan'
  3. .libs/redis.o(.data.rel.local+0xe0):/home/work/thirdparty/php5/php5/p hpredis/redis.c:452: first defined here
  4. /usr/bin/ld: Warning: size of symbol `arginfo_scan' changed from 160 in .libs/redis.o to 200 in .libs/redis_cluster.o
  5. .libs/redis_cluster.o(.data.rel.local+0xe0): In function `create_cluster_context':
  6. /home/work/thirdparty/php5/php5/phpredis/redis_cluster.c:276: multiple definition of `arginfo_kscan'
  7. .libs/redis.o(.data.rel.local+0x0):/home/work/thirdparty/php5/php5/phpredis/redis.c:364: first defined here
  8. collect2: ld returned 1 exit status
  9. make: *** [redis.la] Error 1
複製代碼

最初以為是php多個版本產生install問題,採用./configure 指定php版本,指定php位置。
但是效果還是有問題。
最終通過修改redis_cluester.c 中,注釋掉了這兩個重複的

  1. 40
  2. 41 /* Argument info for HSCAN, SSCAN, HSCAN */
  3. 42 /*ZEND_BEGIN_ARG_INFO_EX(arginfo_kscan, 0, 0, 2)
  4. 43 ZEND_ARG_INFO(0, str_key)
  5. 44 ZEND_ARG_INFO(1, i_iterator)
  6. 45 ZEND_ARG_INFO(0, str_pattern)
  7. 46 ZEND_ARG_INFO(0, i_count)
  8. 47 ZEND_END_ARG_INFO();
  9. 48 */
  10. 49
  11. 50 /* Argument infor for SCAN */
  12. 51 /*
  13. 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_scan, 0, 0, 2)
  14. 53 ZEND_ARG_INFO(1, i_iterator)
  15. 54 ZEND_ARG_INFO(0, str_node)
  16. 55 ZEND_ARG_INFO(0, str_pattern)
  17. 56 ZEND_ARG_INFO(0, i_count)
  18. 57 ZEND_END_ARG_INFO();
  19. 58 */
複製代碼五 簡單測試
  1. $redis = new Redis();
  2. $conn = $redis->connect('127.0.0.1',6379);
  3. echo "redis pass and status show
    ";
  4. var_dump($redis->ping());
  5. $redis->set('test_key','test_value');
  6. echo "test set val=".$redis->get('test_key')."
    ";
  7. $redis->setnx('unique_key',"unique_val");
  8. $redis->setnx('unique_key',"unique_val_2");
  9. echo $redis->get("unique_key");
  10. sleep(60);
  11. echo 'is exist'.$redis->exists('test_60s');
  12. echo 'not has value'.$redis->get('test_60s');
  13. $redis->delete('test_key','test_60s');
複製代碼

個人小站原文連結

redis, php, phpredis
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.