linux编译安装php7+nginx

有很多坑人的内网情况下,需要手动安装PHP,下面就带大家一起来学习一下。有一些企业内网环境用的linux版本又低,又不能装docker,那么就要折腾一下吧。

如果能用docker,如果能联网,如果能升级内核,不装TMD该死的十三年前的内核的RHEL6.5,那么就没有这篇文章及下面的总结了。

环境:Centos 6.5或者RHEL 6.5,其他比如ubuntu或者Debian会有一些不一样,比如安装包是dpkg -i命令,参考ubuntu安装与删除软件的命令

PHP7编译安装

下载PHP源文件:

本次编译安装的php版本

php官网:http://www.php.net/

php7.1.5:http://hk1.php.net/get/php-7.1.5.tar.gz/from/this/mirror

解压文件,安装依赖,配置PHP

tar zxvf php-7.1.5.tar.gz

有几个依赖需要下,一般来说gcc gcc++都有,而libxml2-devel需要根据大家自己的linux版本去下载。

https://pkgs.org/ 到这里搜索下载。

cd php-7.1.5/

这里我来说几个坑:

  1. 安装完成之后,phpinfo中configure file为None:

    默认路径在: /usr/local/php7/etc/php.ini,可以通过strace /usr/local/php7/bin/php -i 2>/tmp/php-fpm.log来查看fpm调用了什么位置的php.ini

    参考: https://www.hongweipeng.com/index.php/archives/1007/

    需要配置--with-config-file-path=/xxx/xxx,如--with-config-file-path=/etc

  2. 配置基本的php安装目录,与enable开启fpm。

    --prefix=/usr/local/php7 --enable-fpm

  3. 安装模块,最终的配置命令:

    如果配置失败了,提示没有autoconf,请跳到后面配置autoconf

     `./configure --prefix=/usr/local/php7/ --enable-mbstring --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-config-file-path=/usr/local/php7/etc/ --enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-opcache --with-zlib --with-openssl --with-iconv`
     
    

    查看一下Makefiles,查找一下EXTRA_LIBS,如果没有-liconv

    请追加-liconv,最后看起来是这样的:

    EXTRA_LIBS = -lcrypt -lcrypt -lrt -lpng -lz -lcurl -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lcurl -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm - lxml2 -lz -lm -lcrypt -liconv

    查看php配置的几种方法:

    (1)phpinfo()直接,直观;

    (2)php -i |grep "这里是参数名称"

    比较全的配置命令:

    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
    ./configure --prefix=/usr/local/php \  
    --with-apxs2=/usr/local/apache/bin/apxs \
    --with-curl \
    --with-freetype-dir=/usr/local/freetype \
    --with-gd \
    --with-gettext \
    --with-iconv-dir \
    --with-mysqli \
    --with-openssl \
    --with-pcre-regex \
    --with-pdo-mysql \
    --with-pdo-sqlite \
    --with-pear \
    --with-png-dir=/usr/local/libpng \
    --with-jpeg-dir=/usr/local/libjpeg \
    --with-xsl \
    --with-zlib \
    --enable-fpm \
    --enable-bcmath \
    --enable-libxml \
    --enable-inline-optimization \
    --enable-gd-native-ttf \
    --enable-mbregex \
    --enable-mbstring \
    --enable-opcache \
    --enable-pcntl \
    --enable-shmop \
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \
    --enable-xml \
    --enable-zip

    shell> make
    shell> make install

**重要:如果编译失败,请make clean **

安装与环境变量的配置

1
2
3
make
make test
make install

安装完以后,PHP 安装到了 /usr/local/php7,我们切进去:

cd /usr/local/php7

有几个配置文件,如php.iniphp-fpm.confphp-fpm.d/www.conf需要配置一下:

1
2
3
cp /usr/local/src/php-7.0.10/php.ini-production etc/php.ini
cp etc/php-fpm.conf.default etc/php-fpm.conf
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf

同时修改一下php-fpm.conf,这里需要添加用户adduser www和组usermod -a -G www www;

参考:

http://blog.sina.com.cn/s/blog_4b93170a0100nggo.html

https://cnzhx.net/blog/linux-add-user-to-group/

修改www.conf

1
2
3
4
5
6
7
user = www
group = www
listen = 127.0.0.1:9000
pm.max_children = 32
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 32

最后启动 php-fpm:

/usr/local/php7/sbin/php-fpm -D

配置全局变量

修改/etc/profile文件使其永久性生效

添加下面两行(也可以写成一行)

export PATH=$PATH:/usr/local/php7/bin

source一下/etc/profile

到这里基本上就完成了PHP7的编译、配置、启动。

说一说扩展extensions

有的时候,像gd,iconv,pdo_mysql扩展需要手动编译安装:

重要的事情说三遍:

不要百度,请在插件的官网下载tar.gz的原码来编译与安装!!!!

不要百度,请在插件的官网下载tar.gz的原码来编译与安装!!!!

不要百度,请在插件的官网下载tar.gz的原码来编译与安装!!!!

下面提供几个常见插件的官网:

  • zlib

    官网:http://www.zlib.net/

    安装举例

    1
    2
    3
    4
    5
    shell> tar xf zlib.1.2.8.tar.gz  
    shell> cd zlib.1.2.8
    shell> ./configure
    shell> make test
    shell> make install
  • GD

    libpng
    官网:http://www.libpng.org/

    1
    2
    3
    4
    5
    6
    shell> tar xf libpng-1.6.21  
    shell> cd libpng-1.6.21
    shell> ./configure --prefix=/usr/local/libpng
    shell> make
    shell> make check
    shell> make install

    jpeg
    官网:http://www.ijg.org/

    1
    2
    3
    4
    5
    shell> tar xf jpegsrc.v9.tar.gz  
    shell> cd jpeg-9
    shell> ./configure --prefix=/usr/local/libjpeg
    shell> make
    shell> make install

    freetype 字体操作库
    官网:http://www.freetype.org/

    1
    2
    3
    4
    5
    shell> tar xf freetype-2.6.3.tar.bz2  
    shell> sh autogen.sh
    shell> ./configure --prefix=/usr/local/freetype
    shell> make
    shell> make install
  • libiconv
    

    https://www.gnu.org/software/libiconv/

    操作举例

    1
    2
    3
    4
    5
    6
    7
    cd /usr/local/src

    tar zxvf libiconv-1.14.tar.gz #解压

    cd libiconv-1.14 #进入安装目录

    ./configure --prefix=/usr/local/libiconv #配置

如果还需要配置如Opcache或者yac

同样。

  1. 首先,下载http://pecl.php.net/get/yac-2.0.1.tgz

    1
    2
    tar zxvf yac-2.0.1.tgz
    cd yac-2.0.1
  2. php扩展标准流程:

    1
    2
    3
    4
    5
    /usr/local/php7/bin/phpize
    ./configure --with-php-config=/usr/local/php7/bin/php-config
    make && make install

    Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
  3. 配置php.ini

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    vim /usr/local/php7/etc/php.ini

    extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"
    zend_extension=opcache.so
    extension=yac.so

    [opcache]
    opcache.enable=1
    opcache.enable_cli=1
    opcache.memory_consumption=64
    opcache.validate_timestamps=1
    opcache.revalidate_freq=2
    opcache.file_cache=/dev/shm

    [yac]
    yac.enable = 1
    yac.keys_memory_size = 4M
    yac.values_memory_size = 64M
    yac.compress_threshold = -1
    yac.enable_cli = 0
  4. 重启php-fpm:

    1
    2
    kill `cat /var/run/php-fpm.pid`
    /usr/local/php7/sbin/php-fpm -D

    如果内存不足,可能会报错,打开交换分区:

    1
    2
    3
    4
    5
    dd if=/dev/zero of=/home/swap bs=64M count=32
    mkswap /home/swap
    swapon /home/swap
    make 完毕以后
    swapoff /home/swap

    编译openssl:

    1
    2
    3
    4
    5
    6
    7
    8
    /usr/local/php7/bin/php -m
    cd /usr/local/src/php-7.1.13/ext/openssl/
    cp config0.m4 config.m4
    /usr/local/php7/bin/phpize --with-php-config=/usr/local/php7/bin/php-config
    ./configure --with-openssl --with-php-config=/usr/local/php7/bin/php-config
    make
    make install
    ll /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/

参考 http://bbs.xiuno.com/thread-12701.htm

配置autoconf

下载新版本解压安装。

http://ftp.gnu.org/gnu/autoconf/下载想要安装的版本,如:http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

1
2
3
4
5
6
7
tar -xzf autoconf-2.69.tar.gz 

cd autoconf-2.69

./configure

make && make install

使用命令autoconf -V查看安装版本。

参考:

linux 下php环境的安装及Discuz论坛安装

编译配置 PHP7 7.0.10, OPCache, Yac,奔向 0.00x 秒

在CentOS上使用离线YUM安装软件包

查看linux系统版本命令

如何在 docker 中使用 PHP FPM