如何实现在不重装 PHP 的情况下安装 PHP 扩展模块

一、背景

有时候在源码安装完 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 组件信息:

lnmp-php-ext-1.jpg

② 安装依赖库:

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

⑥ 验证:

lnmp-php-ext-imap.jpg

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:

lnmp-php-ext-exif-notinstall.jpg

② 安装依赖库:

不需要

③ 进入 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:

lnmp-php-exif-php.jpg

可以看出已经可以读出照片的 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 思否


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 php扩展模块extension 的文章

 本文最后更新于 2019/07/25 19:30:56,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 系统 > 如何实现在不重装 PHP 的情况下安装 PHP 扩展模块

精选评论