一、背景
有时候在源码安装完 PHP 后发现少装了一个模块,此时可以从头开始重新编译安装,但这种方式是很耗时耗力的,这就让我们思考,是不是有方法可以实现直接编译安装所需模块而不用全部编译呢?
二、方法
答案是肯定的,PHP 安装后再加模块的需求还是很大的,PHP 官方已给出解决方案。
安装前可以执行命令查看已经安装的模块:
php -m
大部分 PHP 扩展模块的安装基本上都是三个步骤:
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
PS:如果命令找不到,将 PHP 安装目录下的 bin 文件夹添加到 PATH 即可,或者以完整路径执行,如执行 /usr/local/php/bin/php -m 查看已经安装的模块。
三、范例
以 CentOS 为例:
1、安装 imap 模块
① 安装前 phpinfo 组件信息:
② 安装依赖库:
yum install libc-client-devel
③ 进入 imap 源码目录(无需另外下载,如:/root/lnmp1.3-full/src/php-5.4.45/ext/imap):
cd /root/lnmp1.3-full/src/php-5.4.45/ext/imap
④ 编译安装:
# phpize
...
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-kerberos --with-imap-ssl
...
# make && make install
...
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
有时候会提示:
...
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation
此时执行以下命令应当就解决了:
# ln -s /usr/lib64/libc-client.so /usr/lib/libc-client.so
⑤ 配置:
# vim /usr/local/php/etc/php.ini
...
extension = "imap.so"
...
# /etc/init.d/php-fpm restart
⑥ 验证:
2、安装 exif 模块
① 安装前 exif 组件信息:
在网站根目录创建 exif.php 文件,内容如下:
<?php
$exif = read_exif_data ('IMG_0001.JPG');
while(list($k,$v)=each($exif)) {
echo "$k: $v<br>\n";
}
?>
网页访问 exif.php:
② 安装依赖库:
不需要
③ 进入 exif 源码目录(无需另外下载,如:/root/lnmp1.3-full/src/php-5.4.45/ext/imap):
cd /root/lnmp1.3-full/src/php-5.4.45/ext/exif
④ 编译安装:
# phpize
...
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure --with-php-config=/usr/local/php/bin/php-config
...
# make && make install
...
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
⑤ 配置:
# vim /usr/local/php/etc/php.ini
...
extension = "exif.so"
...
# /etc/init.d/php-fpm restart
⑥ 验证:
重新访问 exif.php:
可以看出已经可以读出照片的 exif 信息了。
3、安装 fileinfo 模块
① 安装依赖库
不需要
② 下载源码
不需要
③ 编译安装
# cd /root/lnmp1.3-full/src/php-5.4.45/ext/fileinfo
# /usr/local/php/bin/phpize
...
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
# ./configure --with-php-config=/usr/local/php/bin/php-config
...
# make && make install
④ 配置启用
# vim /usr/local/php/etc/php.ini
...
extension = "fileinfo.so"
...
# /etc/init.d/php-fpm restart
参考文献:
1、lnmp之安装PHP模块/扩展(不需要重装PHP)
2、php-extension - php7 fileinfo 扩展如何开启 - SegmentFault 思否
Windows 7Chrome 58.0.3029.81来自 福建 的大神
NiceOωO