安装php扩展

php可以分为核心+扩展。

以php-5.5.29的源码为例:

yankedeMacBook-Pro-2:php-5.5.29 yanke$ tree -d -L 1
.
├── TSRM
├── Zend
├── build
├── ext
├── include
├── libs
├── main
├── modules
├── netware
├── pear
├── sapi
├── scripts
├── tests
├── travis
└── win32

这里目录ext即为扩展目录:

yankedeMacBook-Pro-2:php-5.5.29 yanke$ tree -d -L 1 ext
ext
├── bcmath
├── bz2
├── calendar
├── com_dotnet
├── ctype
├── curl
├── date
├── dba
├── dom
├── enchant
├── ereg
├── exif
├── fileinfo
├── filter
├── ftp
├── gd
├── gettext
├── gmp
├── hash
├── iconv
├── imap
├── interbase
├── intl
├── json
├── ldap
├── libxml
├── mbstring
├── mcrypt
├── mssql
├── mysql
├── mysqli
├── mysqlnd
├── oci8
├── odbc
├── opcache
├── openssl
├── pcntl
├── pcre
├── pdo
├── pdo_dblib
├── pdo_firebird
├── pdo_mysql
├── pdo_oci
├── pdo_odbc
├── pdo_pgsql
├── pdo_sqlite
├── pgsql
├── phar
├── posix
├── pspell
├── readline
├── recode
├── reflection
├── session
├── shmop
├── simplexml
├── skeleton
├── snmp
├── soap
├── sockets
├── spl
├── sqlite3
├── standard
├── sybase_ct
├── sysvmsg
├── sysvsem
├── sysvshm
├── tidy
├── tokenizer
├── wddx
├── xml
├── xmlreader
├── xmlrpc
├── xmlwriter
├── xsl
├── zip
└── zlib

77 directories
可以看到php有很多的扩展,在默认情况下,这些扩展都是没有安装的。


以curl扩展库为例,我在代码中需要使用curl_init()/curl_setopt()/curl_exec()/curl_close()函数,那就需要有curl的扩展库。否则执行会报错:


开始进入正题,如何安装curl扩展?我们采用源码编译方式。

1.下载源码,进入源码下ext/curl目录:

yankedeMacBook-Pro-2:curl yanke$ pwd
/Users/yanke/Downloads/php-5.5.29/ext/curl

2. 然后执行:phpize

yankedeMacBook-Pro-2:curl yanke$ phpize
Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
注:phpize是一个shell脚本,用于生成configure等文件。

3. 执行: ./configure

根据当前环境生成makefile文件

4. 执行编译: make

5. 测试: sudo test

直接看最后的结果:

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped    :    0
Exts tested     :   27
---------------------------------------------------------------------

Number of tests :   95                89
Tests skipped   :    6 (  6.3%) --------
Tests warned    :    0 (  0.0%) (  0.0%)
Tests failed    :    1 (  1.1%) (  1.1%)
Expected fail   :    0 (  0.0%) (  0.0%)
Tests passed    :   88 ( 92.6%) ( 98.9%)
---------------------------------------------------------------------
Time taken      :  111 seconds
=====================================================================

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
Bug #64267 (CURLOPT_INFILE doesn't allow reset) [tests/bug64267.phpt]
=====================================================================


可以看到最后还是有测试不通过的。这个bug其实并不是严重bug,这就看你对待bug的态度了。如果你想修复它,可以参考  https://bugs.php.net/bug.php?id=64247

我曾试这修复,但发现代码已经是修复后的代码,这个不应该是很奇怪的事情么!!!

代码diff链接: http://git.php.net/?p=php-src.git;a=blobdiff;f=ext/curl/interface.c;h=765918cc3546ce1a1ed9c8697b234e01e3028834;hp=87b871f2032b9b5a9c70fb4f9e15341879a1831d;hb=54fee59598082052395f4011931096babd6f4013;hpb=220e0d4a5597e2c5248f77da6e88983b9fdd3808


6. 安装: make install

yankedeMacBook-Pro-2:curl yanke$ sudo make install
Password:
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20121212/
由于安装的路径需要root权限,所有在make之前增加sudo。


7. 修改配置文件:

不知道配置文件在哪的,请执行phpinfo()函数,查找php.ini。

yankedeMacBook-Pro-2:curl yanke$ sudo vi /usr/local/lib/php.ini
Password:

增加:

extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/curl.so


注: 以上环境为Mac。如果为Linux、Windows,可能会有所不同。


结束!!



你可能感兴趣的:(BASE)