PHP擴充子產品安裝
編譯httpd時,有涉及動态和靜态子產品,PHP也一樣有靜态與動态之分,之前所涉及到的PHP安裝都全部為靜态,并沒有任何動态的子產品,所謂動态,就是一個獨立存在的.so檔案,在httpd中PHP就是以動态子產品的形式被加載的。PHP一旦編譯完成後,要想再增加一個功能的話,要麼重新編譯PHP,要麼直接編譯一個擴充子產品(生成一個.so檔案),然後在php.ini中配置一下,就可以被加載使用了。
1.檢視PHP加載了哪些子產品
[root@gary-tao ~]# /usr/local/php/bin/php -m
[PHP Modules]
bz2
Core
ctype
date
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
mysql
mysqli
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
2.安裝一個PHP的redis擴充子產品。
[root@gary-tao ~]# cd /usr/local/src/
[root@gary-tao src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
[root@gary-tao src]# mv develop phpredis-develop.zip
[root@gary-tao src]# unzip phpredis-develop.zip //yum install -y unzip
[root@gary-tao src]# cd phpredis-develop
[root@gary-tao phpredis-develop]#
[root@gary-tao phpredis-develop]# /usr/local/php7/bin/phpize //生成configure檔案
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.
[root@gary-tao phpredis-develop]# yum install -y autoconf
[root@gary-tao phpredis-develop]# /usr/local/php7/bin/phpize
[root@gary-tao phpredis-develop]# ls
acinclude.m4 cluster_library.h config.sub CREDITS library.c mkdeb.sh redis_array.h redis_commands.c serialize.list
aclocal.m4 cluster.markdown configure debian library.h mkinstalldirs redis_array_impl.c redis_commands.h tests
arrays.markdown common.h configure.in debian.control ltmain.sh package.xml redis_array_impl.h redis_session.c
autom4te.cache config.guess config.w32 install-sh Makefile.global php_redis.h redis.c redis_session.h
build config.h.in COPYING ISSUE_TEMPLATE.md missing README.markdown redis_cluster.c rpm
cluster_library.c config.m4 crc16.h liblzf mkdeb-apache2.sh redis_array.c redis_cluster.h run-tests.php
[root@gary-tao phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-config
[root@gary-tao phpredis-develop]# echo $?
[root@gary-tao phpredis-develop]# make
[root@gary-tao phpredis-develop]# make install
Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
[root@gary-tao phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
opcache.so redis.so
[root@gary-tao phpredis-develop]# /usr/local/php7/bin/php -m
[root@gary-tao phpredis-develop]# /usr/local/php7/bin/php -m |grep redis
[root@gary-tao phpredis-develop]# /usr/local/php/bin/php -i |grep extension_dir //檢視擴充子產品存放目錄,我們可以在php.ini中去自定義該路徑
PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0
extension_dir => /usr/local/php/lib/php/extensions/no-debug-zts-20131226 => /usr/local/php/lib/php/extensions/no-debug-zts-20131226
sqlite3.extension_dir => no value => no value
[root@gary-tao phpredis-develop]# vim /usr/local/php7/etc/php.ini //增加一行配置(可以放到檔案最後一行)
定義如下:
extension = redis.so
redis
增加示例圖:

報錯:
缺少autoconf包,安裝yum install -y autoconf
這個不影響使用,如果要去掉它,可以在php.ini裡設定一下timezone那個參數
舉例:
你想編譯一個擴充子產品的時候,如果它自帶的源碼包ext下有這個目錄,那就可以直接在目錄下編譯它,如果沒有那就需要去官網下載下傳,下面是給大家舉例一個zip子產品實驗操作如下:
[root@gary-tao ~]# cd /usr/local/src/php-7.1.6
[root@gary-tao php-7.1.6]# ls
acinclude.m4 configure install-sh Makefile.global php.gif README.RELEASE_PROCESS server-tests.php
aclocal.m4 configure.in libphp7.la Makefile.objects php.ini-development README.SELF-CONTAINED-EXTENSIONS snapshot
appveyor CONTRIBUTING.md libs makerpm php.ini-production README.STREAMS stamp-h.in
build CREDITS libtool meta_ccld README.EXT_SKEL README.SUBMITTING_PATCH stub.c
buildconf ext LICENSE missing README.GIT-RULES README.TESTING tests
buildconf.bat EXTENSIONS ltmain.sh mkinstalldirs README.input_filter README.TESTING2 travis
CODING_STANDARDS footer main modules README.MAILINGLIST_RULES README.UNIX-BUILD-SYSTEM TSRM
config.guess generated_lists makedist netware README.md README.WIN32-BUILD-SYSTEM UPGRADING
config.log genfiles Makefile NEWS README.namespaces run-tests.php UPGRADING.INTERNALS
config.nice header Makefile.frag pear README.NEW-OUTPUT-API sapi vcsclean
config.status include Makefile.fragments php7.spec README.PARAMETER_PARSING_API scripts win32
config.sub INSTALL Makefile.gcov php7.spec.in README.REDIST.BINS server-tests-config.php Zend
[root@gary-tao php-7.1.6]# cd ext/
[root@gary-tao ext]# ls
bcmath date ext_skel_win32.php gmp json mysqlnd pcre pdo_odbc pspell simplexml sqlite3 tokenizer xsl
bz2 dba fileinfo hash ldap oci8 pdo pdo_pgsql readline skeleton standard wddx zip
calendar dom filter iconv libxml odbc pdo_dblib pdo_sqlite recode snmp sysvmsg xml zlib
com_dotnet enchant ftp imap mbstring opcache pdo_firebird pgsql reflection soap sysvsem xmlreader
ctype exif gd interbase mcrypt openssl pdo_mysql phar session sockets sysvshm xmlrpc
curl ext_skel gettext intl mysqli pcntl pdo_oci posix shmop spl tidy xmlwriter
[root@gary-tao ext]# /usr/local/php7/bin/php -m |grep zip
[root@gary-tao ext]# cd zip/
[root@gary-tao zip]# ls
config.m4 config.w32 CREDITS examples lib LICENSE_libzip php_zip.c php_zip.h tests TODO zip_stream.c
[root@gary-tao zip]# /usr/local/php7/bin/phpize
[root@gary-tao zip]# ./configure --with-php-config=/usr/local/php7/bin/php-config
[root@gary-tao zip]# make
[root@gary-tao zip]# echo $?
[root@gary-tao zip]# make install