LNMP环境为PHP添加exif扩展

在使用时 php报出如下错误: Call to undefined function gemvary\exif_imagetype()

好吧,exif扩展没安装…

通过 打印phpinfo() 查看得知 mbstring 扩展是有的,exif扩展没有

982daa5b6884e1aaa66c1558ae324394.png

如果mbstring也没有,也可以参考以下exif扩展的安装过程;

安装过程基本类似的;

进入主题:

1、查看当前环境PHP的版本号和安装目录

whereis php
结果:
[root@xiaojun exif]# whereis php
php: /usr/bin/php /usr/lib64/php /etc/php.d /etc/php.ini /usr/include/php /usr/local/php /usr/share/php /usr/local/php/bin/php /usr/share/man/man1/php.1.gz

[root@xiaojun exif]# /usr/local/php/bin/php -v
PHP 7.1.7 (cli) (built: Mar 16 2018 11:06:26) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

那么phpize的位置就是 /usr/local/php/bin/phpize

2、进入php的源码目录

#这是我电脑上的路径,得改成自己服务器上的路径
cd /www/lnmp1.4/src/php-7.1.7/ext/exif

进入扩展目录后进行初始化:

/usr/local/php/bin/phpize

命令执行后当前目录会多几个文件,只要有 configure 这个文件就行

然后再检查配置,输入:

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

如果有报错说明路径不对,使用 whereis php-config 查看服务器上此文件的路径

接下来再依次执行这两个命令:

make
make install

执行完会有类似如下信息:

[root@xiaojun exif]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/

这个目录就是扩展安装后的存放目录;

3、修改php.ini引入扩展

vi /usr/local/php/etc/php.ini

在最后面加入:

extension=exif.so

然后保存,重启PHP就完事了;

需要注意的是 exif.so 必须放在 mbstring.so 的后面,否则会出错;

可能出现的问题:

重启PHP时提示: NOTICE: PHP message: PHP Warning:  Module ‘mbstring’ already loaded in Unknown on line 0

意思是mbstring这个扩展已经加载过了,还尝试引入;

解决办法:

PHP加载模块有两种方式,一种是通过php.ini 加载模块,另一种是通过编译时的参数加载模块。

这里出这个提示,那么mbstring应该就是属于后者,只需要php.ini中将其注释掉就行了

;extension=mbstring.so

输入/usr/local/bin/phpize后提示: Cannot find config.m4. Make sure that you run /usr/local/bin/phpize in the top level sourc

我是将openssl扩展内的config0.m4文件改成config.m4就没提示了;

cd ../openssl
cp ./config0.m4 ./config.m4

至于为什么openssl扩展的config.m4为什么会影响到安装其它扩展,暂不得而知;