处理手机上传的图片的时候, 遇到上传后的图片方向不对的问题,拍摄的时候是竖拍,但上传后照片横过来了。
了解到手机(包括安卓和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)

QQ截图20190925002402.jpg

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

QQ截图20190925003038.jpg

这样就代表OK了

再次运行最初报错的脚本,可以了。

完成!

标签: php, lnmp, 扩展

添加新评论