배경: Redis를 설치한 후 PHP가 Redis를 작동할 수 있도록 하려면 phpredis 확장을 설치해야 합니다. 이 시스템에는 여러 PHP 버전이 있으므로 설치 과정에서 겪게 되는 함정을 공유하겠습니다.
1 다운로드
git에서 redis 확장 패키지를 다운로드하세요
- git clone https://github.com/nicolasff/phpredis
-
코드 복사
두 번째 마운트 및 구성
셸에 phpize 입력 [참고: 여러 PHP 버전을 사용할 경우 지정해야 함]
[phpize는 php 확장 모듈을 확장하는 데 사용됩니다. phpize를 통해 PHP 플러그인 모듈을 만들 수 있습니다.]
참고: (phpize에 여러 개의 PHP가 포함된 경우 위치를 지정해야 합니다)
- cuihuan:phpredis cuixiaohuan$ ../php/bin/phpize
- 구성 for :
- PHP Api 버전: 20121113
- Zend 모듈 Api 번호: 20121212
- Zend Extension Api 번호: 220121212
- autoconf를 찾을 수 없습니다. autoconf 설치와
- $PHP_AUTOCONF 환경 변수를 확인하세요. 그런 다음 이 스크립트를 다시 실행하세요.
-
코드 복사
오류가 보고되면 이를 설치해야 합니다. Brew install autoconf [phpize error] 그렇지 않으면, phpize가 없습니다
- [work@cuixiaozhuai phpredis]$ ../php/bin/phpize
- 구성 대상:
- PHP Api 버전: 20041225
- Zend 모듈 API 번호: 20060613
- Zend 확장 API 번호: 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 테스트를 하는 것이 가장 좋습니다 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' 기호의 크기가 에서 160에서 변경되었습니다. libs/redis.o를 .libs/redis_cluster.o
- .libs/redis_cluster.o(.data.rel.local 0xe0)에서 200으로: `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로 인해 발생하는 설치 문제인 줄 알았습니다. ./configure를 사용하여 PHP 버전과 PHP 위치를 지정했습니다. 그러나 효과에는 여전히 문제가 있습니다. 마지막으로 redis_cluester.c를 수정하여 이 두 개의 중복 항목이 주석 처리되었습니다.
- 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 ZEND_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();
-
- 58 */
-
-
코드 복사
5가지 간단한 테스트
- $redis = new Redis();
- $conn = $redis->connect('127.0.0.1',6379 );
-
- echo "redis 통과 및 상태 표시";
- 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 '존재함'.$redis->exists('test_60s');
- echo '값이 없음'.$redis->get('test_60s ');
- $redis->delete('test_key','test_60s');
-
코드 복사
개인 웹사이트 원본 링크
|