当前使用Centos7.x系统,php使用8.0版本
注:CentOS6.x的话需要升级autoconf版本
1、安装所需依赖,如果在编译时还提示缺少其他依赖,请自行安装
yum install autoconf gcc gcc-c++ wget
2、下载php8安装包
wget https://www.php.net/distributions/php-8.0.18.tar.gz
cd php-8.0.18/ext/fileinfo
/usr/local/php/bin/phpize
根据自己phpize的位置来运行即可(不知道phpize在哪的直接find / -name phpize查找),运行完提示下面信息,然后编译
Configuring for:
PHP Api Version: 20200930
Zend Module Api No: 20200930
Zend Extension Api No: 420200930
3、编译扩展模块
./configure --with-php-config=/usr/local/php/bin/php-config
make
如果此时执行make,那么会看到以下报错
error: ‘for’ loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
其实此处已给出解决办法,使用-std=c99或-std=gnu99来编译(这两个参数用哪个都可以)
解决办法:
修改Makefile文件
在第25行
将CFLAGS = -g -O2修改为以下内容
CFLAGS = -std=c99 -g -O2
保存退出,执行以下编译命令
make clean
make
make install
执行完成后会显示扩展模块编译到的目录/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/
4、修改php.ini添加扩展
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/"
extension=fileinfo.so
注意:如果之前配置过extension_dir路径了,则只需要配置extension=fileinfo.so即可
保存退出,重启php
通过php -m | grep fileinfo命令可看到,扩展已生效
附:如果是php8.1版本的话,需要在Makefile文件中改成以下内容
CFLAGS = -std=c99 -g