Home  >  Article  >  Backend Development  >  [Redis Learning 2] Installation of phpredis extension under multiple PHP versions

[Redis Learning 2] Installation of phpredis extension under multiple PHP versions

WBOY
WBOYOriginal
2016-07-23 08:54:441346browse

Background: After installing redis, you need to install the phpredis extension to allow PHP to operate redis; this machine has multiple PHP versions. Let me share the pitfalls encountered during the installation process.

1 download

Download the redis expansion package on git

  1. git clone https://github.com/nicolasff/phpredis
Copy the code
2 Mount and configure

Enter phpize in the shell [Note: multiple php versions need to be specified]

  1. ./configure
Copy code

[phpize is used to extend php extension modules, and php can be built through phpize Plug-in module】

Note: (If phpize contains multiple php, the location must be specified)

  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. Report error] Otherwise there is no phpize
[work@cuixiaozhuai phpredis]$ ../php/bin/phpize
Configuring for:

PHP Api Version: 20041225

Zend Module Api No: 20060613
Zend Extension Api No: 22006 0519
[work@cuixiaozhuai phpredis]$ ./configure --with-php-config=/home/work/thirdparty/php5/bin/php-config
  1. Copy code
  2. When there are multiple versions of php , need to specify the configuration file
./configure --with-php-config=/home/work/thirdparty/php5/bin/php-config

Copy the code
    Three compilation and installation After
  1. make, it is best to make test
  2. make install
cuihuan:phpredis cuixiaohuan$ make

. . .
Build complete.

Don't forget to run 'make test'.
cuihuan:phpredis cuixiaohuan$ make test
    cuihuan:phpredis cuixiaohuan$ make install
  1. Copy code
  2. Four Problem fixes
  3. 【Fixed, but the reason may not be accurate】
  4. make compile error
.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/php5/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
  1. collect2: ld returned 1 exit status
  2. make: *** [redis.la] Error 1
  3. Copy code
  4. At first, I thought it was an installation problem generated by multiple versions of PHP. Use ./configure to specify the PHP version and PHP location.
  5. But the effect is still problematic.
Finally, by modifying redis_cluester.c, these two duplicates were commented out

40

41 /* Argument info for HSCAN, SSCAN, HSCAN */

42 /*ZEND_BEGIN_ARG_INFO_EX(arginfo_kscan, 0, 0 , 2)
    43 ZEND_ARG_INFO(0, str_key)
  1. 44 ZEND_ARG_INFO(1, i_iterator)
  2. 45 ZEND_ARG_INFO(0, str_pattern)
  3. 46 ZEND_ARG_INFO(0, i_count)
  4. 47 Z END_END_ARG_INFO();
  5. 48 * /
  6. 49
  7. 50 /* Argument infor for SCAN */
  8. 51 /*
  9. 52 ZEND_BEGIN_ARG_INFO_EX(arginfo_scan, 0, 0, 2)
  10. 53 ZEND_ARG_INFO(1, i_iterator)
  11. 54 ZEND_ARG_INFO(0, str_node )
  12. 55 ZEND_ARG_INFO (0, Str_pattern)
  13. 56 ZEND_ARG_INFO (0, I_Count)
  14. 57 ZEND_END_ARG_INFO ();五 简单测试
    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


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn