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();
?>

PHP编译安装后的模块添加安装(比如,MySQL模块,gd模块)_python