LNMP:给PHP加装 扩展exif
处理手机上传的图片的时候, 遇到上传后的图片方向不对的问题,拍摄的时候是竖拍,但上传后照片横过来了。
了解到手机(包括安卓和iOS都是用exif的 Orientation值来标记陀螺仪的水平方向)
要实现在php中读取并修正图像的显示方向,就要用到exif_read_data() 。
查看过php_info 后确认现在的lnmp上并没有这个扩展,代码执行后报错
PHP Fatal error: Uncaught Error: Call to undefined function exif_read_data() in ...
windows的处理方法倒是比较简单
从php.ini 中去掉以下两行的注释
;extension=php_mbstring.dll
;extension=php_exif.dll
确保配置文件对应的 ext目录内有对应的 dll文件,然后重启http服务就好
linux下则相对复杂一点点,需要编译,下文为流水账
(只记录lnmp的处理方法,手动安装配置的过程类似)
1. 确认当前php的版本(*通过phpinfo)
2. 进入lnmp的安装目录,找到对应版本php的 bz2包,解压
例如
cd /home/download/lnmp1.4-full/src/
# ls -l | grep php
-rw-r--r-- 1 root root 201339 Apr 30 2016 php-5.2.17-fpm-0.5.14.diff.gz
-rw-r--r-- 1 root root 9092312 Jan 7 2011 php-5.2.17.tar.bz2
-rw-r--r-- 1 root root 11396771 Jan 21 2015 php-5.3.29.tar.bz2
-rw-r--r-- 1 root root 12703324 Oct 1 2015 php-5.4.45.tar.bz2
-rw-r--r-- 1 root root 13701262 Jul 21 2016 php-5.5.38.tar.bz2
-rw-r--r-- 1 root root 15028813 Jul 6 2017 php-5.6.31.tar.bz2
-rw-r--r-- 1 root root 15342611 Jul 5 2017 php-7.0.21.tar.bz2
-rw-r--r-- 1 root root 15751686 Jul 6 2017 php-7.1.7.tar.bz2
-rw-r--r-- 1 root root 4323896 Mar 29 2017 phpMyAdmin-4.0.10.20-all-languages.tar.xz
-rw-r--r-- 1 root root 6317928 Jul 21 2017 phpMyAdmin-4.7.3-all-languages.tar.xz
-rw-r--r-- 1 root root 42609 Oct 28 2016 p.php
-rw-r--r-- 1 root root 396699 Apr 30 2016 ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
-rw-r--r-- 1 root root 434691 Apr 30 2016 ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
-rw-r--r-- 1 root root 609388 Apr 30 2016 zend-loader-php5.5-linux-i386.tar.gz
-rw-r--r-- 1 root root 665320 Apr 30 2016 zend-loader-php5.5-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 616325 Apr 30 2016 zend-loader-php5.6-linux-i386.tar.gz
-rw-r--r-- 1 root root 671359 Apr 30 2016 zend-loader-php5.6-linux-x86_64.tar.gz
执行解压
# tar -jxvf php-7.1.7.tar.bz2
... ...
3. 解压后进入 exif 路径
/home/download/lnmp1.4-full/src/php-7.1.7/ext/exif
4. 编译,安装
[ exif]# ./configure --with-php-config=/usr/local/php/bin/php-config
[ exif]# make && make install
直到看到以下编译完成提示
Build complete.
Don't forget to run 'make test'
5. 编辑 php.ini 文件
再次找到
;extension=php_exif.dll
extension=exif.so ; 添加一行
6. 重启 php-fpm 服务
[ exif]# lnmp php-fpm restart
7. 最后检查 phpinfo, 看是已经支持exif
这样就代表OK了
再次运行最初报错的脚本,可以了。
完成!
