11.32 PHP擴展模塊安裝
php模塊已經安裝、編譯好了,但發現少了一個模塊(安裝時忘記/需求變更),此時可以以擴展模塊形式編譯一個新模塊(.so文件)
redis:一個nosql,通常在lamp架構下被當做一個緩存使用
以擴展模塊的形式編譯安裝一個redis模塊:
1 下載redis的安裝包
[root@hyc-01-01 src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
2 解壓包
[root@hyc-01-01 src]# mv develop phpredis-develop.zip
[root@hyc-01-01 src]# unzip phpredis-develop.zip
3 在phpredis-develop.zip解壓後的文件中生成configure目錄
要./configure生成可編譯文件就必須要在解壓後的包裏有這個目錄,否則無法配置
[root@hyc-01-01 phpredis-develop]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script. 報錯
缺少包autoconf
[root@hyc-01-01 phpredis-develop]# yum install -y autoconf
[root@hyc-01-01 phpredis-develop]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
正常執行
[root@hyc-01-01 phpredis-develop]# ls
acinclude.m4 config.m4 install-sh package.xml redis_commands.h
aclocal.m4 config.sub ISSUE_TEMPLATE.md php_redis.h redis_session.c
arrays.markdown configure liblzf README.markdown redis_session.h
autom4te.cache configure.in library.c redis_array.c rpm
build config.w32 library.h redis_array.h run-tests.php
cluster_library.c COPYING ltmain.sh redis_array_impl.c serialize.list
cluster_library.h crc16.h Makefile.global redis_array_impl.h tests
cluster.markdown CREDITS missing redis.c
common.h debian mkdeb-apache2.sh redis_cluster.c
config.guess debian.control mkdeb.sh redis_cluster.h
config.h.in INSTALL.markdown mkinstalldirs redis_commands.c
[root@hyc-01-01 phpredis-develop]# pwd
/usr/local/src/phpredis-develop
4 生成可編譯文件
[root@hyc-01-01 phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-config
5 編譯並安裝
[root@hyc-01-01 phpredis-develop]# make
[root@hyc-01-01 phpredis-develop]# make install
Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
make install會把redis的.so文件放到/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/目錄下
[root@hyc-01-01 phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.so redis.so
檢查php支持的擴展模塊:
[root@hyc-01-01 phpredis-develop]# /usr/local/php7/bin/php -m|grep redis
發現php支持的擴展模塊中不包含redis模塊
配置在php加載redis模塊:
找到擴展模塊所在路徑:
[root@hyc-01-01 lib]# /usr/local/php7/bin/php -i|grep extension_dir
extension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303
sqlite3.extension_dir => no value => no value
編輯php模塊配置文件:
[root@hyc-01-01 lib]# vim /usr/local/php7/etc/php.ini
…
920
921 ;extension=php_soap.dll
922 ;extension=php_sockets.dll
923 ;extension=php_sqlite3.dll
924 ;extension=php_tidy.dll
925 ;extension=php_xmlrpc.dll
926 ;extension=php_xsl.dll
927 extension=redis.so
…
[root@hyc-01-01 lib]# /usr/local/php7/bin/php -m|grep redis
redis redis模塊加載成功
redis等模塊屬於第三方,不是php自帶,使用時需要專門下載
在php源碼包中有ext目錄,該目錄下有很多模塊:
[root@hyc-01-01 php-7.1.6]# ls ext
bcmath ext_skel interbase opcache pdo_sqlite skeleton tokenizer
bz2 ext_skel_win32.php intl openssl pgsql snmp wddx
calendar fileinfo json pcntl phar soap xml
com_dotnet filter ldap pcre posix sockets xmlreader
ctype ftp libxml pdo pspell spl xmlrpc
curl gd mbstring pdo_dblib readline sqlite3 xmlwriter
date gettext mcrypt pdo_firebird recode standard xsl
dba gmp mysqli pdo_mysql reflection sysvmsg zip
dom hash mysqlnd pdo_oci session sysvsem zlib
enchant iconv oci8 pdo_odbc shmop sysvshm
exif imap odbc pdo_pgsql simplexml tidy
[root@hyc-01-01 php-7.1.6]# pwd
/usr/local/src/php-7.1.6
若ext目錄下存在某個包,則在安裝配置模塊時不需要下載,只要進入對應包的目錄,執行/usr/local/php7/bin/phpize即可在該目錄下生成configure文件,然後再生成可編譯文件,編譯、安裝即可
生成可編譯文件(即執行./configure時)需要跟參數--with-php-config=/usr/local/php7/bin/php-config