PHP的模块指的是 php -m 命令所输出的内容。那么,PHP的模块茫茫多,有时候采用源码编译安装源码包的方式安装的php和PHP-fpm,在预编译阶段很多模块就可能有所遗漏或者暂时不方便安装,或者是在安装后有新的需求,需要安装新的模块,这个时候就需要我们再次的将新模块(库)编译到原有的PHP里面了。
(一)实验目标
在刚编译安装完成的PHP5.6.40版本里,添加新的模块gd和mysql,主要原因是在第一次预编译的时候遗漏了gd模块,mysql的PHP连接支持只安装了mysqli,因此,计划再增加gd和mysql两个模块。
(二)解压后的源码安装包的位置和PHP5.6.40所指定的安装位置
源码安装包解压出来的文件夹放置在 /usr/local/src/php-5.6.40/
第一次编译安装后的PHP所在位置在 /usr/local/php/
(三)有哪些模块我们可以增加??
[root@centos6 ext]# pwd
/usr/local/src/php-5.6.40/ext
[root@centos6 ext]# ls
bcmath dba fileinfo iconv mbstring odbc pdo_firebird phar shmop sqlite3 tokenizer zip
bz2 dom filter imap mcrypt opcache pdo_mysql posix simplexml standard wddx zlib
calendar enchant ftp interbase mssql openssl pdo_oci pspell skeleton sybase_ct xml
com_dotnet ereg gd intl mysql pcntl pdo_odbc readline snmp sysvmsg xmlreader
ctype exif gettext json mysqli pcre pdo_pgsql recode soap sysvsem xmlrpc
curl ext_skel gmp ldap mysqlnd pdo pdo_sqlite reflection sockets sysvshm xmlwriter
date ext_skel_win32.php hash libxml oci8 pdo_dblib pgsql session spl tidy xsl
在源码包内,我们可以看到,茫茫多的可增加模块,其中有mysql模块和gd模块。
(四)现在已安装的有哪些模块??
[root@centos6 ext]# /usr/local/php/bin/php -m
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
ereg
filter
ftp
gettext
hash
iconv
json
libxml
mbstring
mhash
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
可以看到,没有mysql和gd模块,计划可以实施。
(五)开始编译安装新模块(要在源码包内安装)
[root@centos6 ext]# pwd
/usr/local/src/php-5.6.40/ext
[root@centos6 ext]# cd mysql
[root@centos6 mysql]# ls
config.m4 config.w32 CREDITS mysql.dsp mysql.mak mysql_mysqlnd.h package.xml php_mysql.c php_mysql.h php_mysql_structs.h tests
可以看到,现在模块内并没有configure脚本,自然无法预编译和编译安装啦。这个不用慌,在新模块的文件夹下,执行一个命令phpize(这个命令是在安装出来的php的bin里面哦)即可,预编译脚本即可出现了。
root@centos6 mysql]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@centos6 mysql]# ls
acinclude.m4 build config.m4 configure.in install-sh missing mysql.mak php_mysql.c run-tests.php
aclocal.m4 config.guess config.sub config.w32 ltmain.sh mkinstalldirs mysql_mysqlnd.h php_mysql.h tests
autom4te.cache config.h.in configure CREDITS Makefile.global mysql.dsp package.xml php_mysql_structs.h
执行以下命令进行预编译工作:
./configure --with-php-config=/usr/local/php/bin/php-config --with-mysql (第二小节所说的两个目录十分重要,要牢记哦,新增加模块的时候绝对路径指明一下php-config命令,with要新增的模块名)
[root@centos6 bin]# pwd
/usr/local/php/bin
[root@centos6 bin]# ls
pear peardev pecl phar phar.phar php php-cgi php-config phpize
(六)make 和make install
过程就略了,只是需要关注最后的几行:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
(七)进入最后提示的目录
[root@centos6 no-debug-zts-20131226]# pwd
/usr/local/php/lib/php/extensions/no-debug-zts-20131226
[root@centos6 no-debug-zts-20131226]# ls
bz2.so gd.so mysql.so opcache.a opcache.so
(八)将需要增加的模块名称.so 的绝对路径写入 PHP的配置文件,通常是 /etc/php.ini 这个文件的末尾:
;openssl.capath=
; Local Variables:
; tab-width: 4
; End:
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/gd.so
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/mysql.so
像我这样就可以了(只是增加最后两行哦)。
(九)验证模块是否正确安装,同时验证PHP连接mysql是否正常
[root@centos6 ~]# /usr/local/php/bin/php -m | grep gd
gd
有输出,证明模块安装成功。
验证PHP和MySQL的连接是否正常:
编写任意一个php文件,将该文件放置在web服务器的发布区,网页访问它即可。
vim testmysql.php
<?php
$conn = mysqli_connect('192.168.0.16','root','mima');
if ($conn)
echo "php已成功连接mysql,你真棒";
else
echo "你咋回事,这都搞不定,细心检查下吧";
mysql_close();
?>