八个比特

PHP增加fileinfo扩展

字数统计: 533阅读时长: 2 min
2019/04/07 Share

由于要部署Mediawiki,需要用到这个插件。

另外多说几句,Mediawiki的1.32版本需要PHP7支持,而不想升级PHP7的可以选择1.30.1版本。另外要注意的是,Mediawiki需要composer的支持,PHP5.6是有预装的,PHP5.4以下的版本可能需要自己下载安装。

1
php -r "readfile('https://getcomposer.org/installer');" | php

很不幸我使用的lnmp包没有预装fileinfo模块,具体可以看PHP探针里面的信息,我的很明显有 --disable fileinfo样式。

因为lnmp考虑到大多数服务器内存不足1G,如果不禁用的话编译时会出现错误:

1
make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1

这时需要去PHP官网下载对应版本的源码包,版本可以用php -v查询。下载完成后把 /ext/fileinfo/ 文件夹导出来,上传到服务器。

切进上传文件夹的目录,执行phpize,会出现类似如下的信息:

1
2
3
PHP Api Version:         xxxxxxxx
Zend Module Api No: xxxxxxxx
Zend Extension Api No: xxxxxxxx

执行语句(对应你php的安装目录)

1
./configure --with-php-config=/usr/local/php/bin/php-config

编译

1
make && make install

成功会显示:

1
2
3
4
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

修改php.ini,把里头改成

1
extension = fileinfo.so

PHP7以上的版本重启php-fpm就完事了。
但PHP5.x版本可能会出现如下错误:

1
2
3
4
5
Starting php-fpm [07-Feb-2019 00:09:51] NOTICE: 
PHP message: PHP Warning:PHP Startup: Unable to load dynamic library
'/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/php_fileinfo.so'
-/usr/local/php/lib/php/extensions/no-debug-non- zts-20131226/php_fileinfo.so:
cannot open shared object file: No such file or directory in Unknown on line 0

原因是编译文件的命名与配置中写入的不一致。

cd到/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/,将fileinfo.so文件重命名为php_fileinfo.so

再重启,探针里就可以看到fileinfo启动了。

当然也有那么一种可能是因为链接没做对,需要用ldconfig命令将so文件分连接到/usr/lib/和/usr/lib64/
ln -s /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/php_fileinfo.so /usr/lib/php_fileinfo.so && ldconfig

CATALOG