PHP7 Github源码安装

最近开发图片裁剪的功能,本地开发好后在预发环境发现无法处理.jpg的文件,但是.png的图片可以处理。由于框架报错不够友好,排查了很久才定位到是 libjpg.so 文件加载目录不对的问题。要修复这个问题只能重新编译PHP,这太令人蛋疼了。主要的配置参数是 –with-jpeg-dir=/usr/lib64 这一行,告诉PHP程序到 /usr/lib64 目录下找libjpg.so文件。如果不设置–with-jpeg-dir参数的话,默认是到 /usr/lib 下查找。

如何从Github源码安装PHP7,请看下文。

  1. 直接到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
  2. 安装需要用到的扩展程序

    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
  3. 生成configure可执行文件

    1
    2
    $ cd php-src
    $ ./buildconf --force
  4. 生成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
  5. 编译&安装文件

    1
    2
    $ make -j8 
    $ make install -j8
  6. 初始化配置文件

    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服务做管理。

  7. 判断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,表示安装成功。

  8. 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