最近开发图片裁剪的功能,本地开发好后在预发环境发现无法处理.jpg的文件,但是.png的图片可以处理。由于框架报错不够友好,排查了很久才定位到是 libjpg.so 文件加载目录不对的问题。要修复这个问题只能重新编译PHP,这太令人蛋疼了。主要的配置参数是 –with-jpeg-dir=/usr/lib64 这一行,告诉PHP程序到 /usr/lib64 目录下找libjpg.so文件。如果不设置–with-jpeg-dir参数的话,默认是到 /usr/lib 下查找。
如何从Github源码安装PHP7,请看下文。
直接到Github下载了源码 https://github.com/php/php-src
1
2
3$ git clone https://github.com/php/php-src.git
$ cd php-src
$ git checkout php-7.1.8安装需要用到的扩展程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14$ sudo yum install -y \
gcc-c++ autoconf \
libjpeg libjpeg-devel libpng \
libpng-devel libvpx libvpx-devel freetype freetype-devel \
libpng libpng-devel libxml2 libxml2-devel \
ncurses curl openssl-devel \
zlib zlib-devel glibc glibc-devel \
glib2 glib2-devel bzip2 bzip2-devel \
gdbm-devel db4-devel libXpm-devel \
libX11-devel gd-devel gmp-devel \
readline-devel libxslt-devel \
expat-devel xmlrpc-c xmlrpc-c-devel \
libicu-devel libmcrypt-devel \
libmemcached-devel bison生成configure可执行文件
1
2$ cd php-src
$ ./buildconf --force生成Makefile文件 (重要)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41$ ./configure \
--prefix=/home/www/php \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-gettext \
--with-mcrypt \
--with-pear \
--with-iconv \
--with-gmp \
--with-jpeg-dir=/usr/lib64 \
--with-png-dir=/usr/lib64 \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip编译&安装文件
1
2$ make -j8
$ make install -j8初始化配置文件
1
2
3
4
5
6
7
8
9
10
11
12$ sudo ln -s /usr/local/bin/php /home/www/php/bin/php
$ sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
$ sudo chmod +x /etc/init.d/php-fpm
$ cp php.ini-production /home/www/php/lib/php.ini
$ cd /home/www/php/etc/
$ cp php-fpm.conf.default php-fpm.conf
$ cp php-fpm.d/www.conf.default php-fpm.d/www.conf
````
配置文件初始化完成之后PHP环境基本装完,我们可以通过
````sh
$ sudo service php-fpm start命令对php-fpm服务做管理。
判断libjpg.so是否加载成功
1
2
3
4
5
6
7
8
9$ php -r 'print_r(gd_info());'
[GD Version] => bundled (2.1.0 compatible)
[FreeType Support] => 1
[FreeType Linkage] => with freetype
[GIF Read Support] => 1
[GIF Create Support] => 1
[JPEG Support] => 1
[PNG Support] => 1结果中已经显示JPEG Support = 1,表示安装成功。
PHP7 配置进一步优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14$ vi /home/www/php/lib/php.ini
# 查看gcc版本
$ gcc -v
# 如果gcc版本高于 4.8.0 请添加如下配置
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.huge_code_pages=1
# 添加配置后执行如下命令
$ sudo sysctl vm.nr_hugepages=512
# 如果gcc版本低于 4.8.0 请添加如下配置
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1