查看PHP模块

[root@centos6 ~]# php -m

[PHP Modules]

bz2

Core

ctype

date

dom

ereg

exif

fileinfo

filter

gd

hash

iconv

json

libxml

mbstring

mcrypt

mysql

openssl

pcre

PDO

pdo_sqlite

Phar

posix

Reflection

session

SimpleXML

soap

sockets

SPL

sqlite3

standard

tokenizer

xml

xmlreader

xmlwriter

zlib

[Zend Modules]

如果我们发现有一个模块没有编译进来,解决办法有两种:第一,需要重新编译,重新配置;第二,单独编译该模块,使用动态共享的方式加载该模块。我们自己尝试编译一个PHP动态共享模块。

PHP安装包的ext目录下包含了许多模块的源代码:

[root@centos6 ~]# cd /usr/local/src/php-5.4.36

[root@centos6 php-5.4.36]# cd ext

[root@centos6 ext]# ls

bcmath dba fileinfo iconv mbstring odbc pdo_mysql posix simplexml standard wddx zlib

bz2 dom filter imap mcrypt openssl pdo_oci pspell skeleton sybase_ct xml

calendar enchant ftp interbase mssql pcntl pdo_odbc readline snmp sysvmsg xmlreader

com_dotnet ereg gd intl mysql pcre pdo_pgsql recode soap sysvsem xmlrpc

ctype exif gettext json mysqli pdo pdo_sqlite reflection sockets sysvshm xmlwriter

curl ext_skel gmp ldap mysqlnd pdo_dblib pgsql session spl tidy xsl

date ext_skel_win32.php hash libxml oci8 pdo_firebird phar shmop sqlite3 tokenizer zip

PHP默认没有没有安装curl模块,下面命令返回无结果:

[root@centos6 ext]# php -m |grep -i curl

我们以编译安装PHP的curl模块为例进行说明:进入curl目录

[root@centos6 ext]# cd curl

[root@centos6 curl]# ls

config.m4 config.w32 CREDITS curl.dsp interface.c multi.c package.xml php_curl.h streams.c tests

生成configure相关的文件:

[root@centos6 curl]# yum install -y m4 autoconf#安装两个自动生成configure的工具

[root@centos6 curl]# /usr/local/php/bin/phpize#生成configure

Configuring for:

PHP Api Version: 20100412

Zend Module Api No: 20100525

Zend Extension Api No: 220100525

[root@centos6 curl]# ls

acinclude.m4 config.h.in config.w32 ltmain.sh package.xml

aclocal.m4 config.m4 CREDITS Makefile.global php_curl.h

autom4te.cache config.sub curl.dsp missing run-tests.php

build configure install-sh mkinstalldirs streams.c

config.guess configure.in interface.c multi.c tests

配置

[root@centos6 curl]# ./configure --with-php-config=/usr/local/php/bin/php-config

错误1:configure: error: Please reinstall the libcurl distribution -

easy.h should be in <curl-dir>/include/curl/

解决:[root@centos6 curl]# yum -y install curl-devel

编译

[root@centos6 curl]# make

[root@centos6 curl]# echo $?

0

安装

[root@centos6 curl]# make install

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

[root@centos6 curl]# echo $?

0

模块已生成

[root@centos6 curl]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

curl.so

查看extension_dir

[root@centos6 curl]# php -i |grep extension_dir

extension_dir => /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525 => /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525

sqlite3.extension_dir => no value => no value

[root@centos6 curl]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

curl.so

也可以自定义extension_dir

[root@centos6 curl]# vim /usr/local/php/etc/php.ini

……

; Directory in which the loadable extensions (modules) reside.

; http://php.net/extension-dir

; extension_dir = "./"

; On windows:

; extension_dir = "ext"

……

配置加载curl.so

……

;extension=php_pgsql.dll

;extension=php_pspell.dll

;extension=php_shmop.dll

extension=curl.so

……

查看动态加载的模块

[root@centos6 curl]# php -m |grep curl

curl