PHP实战PHP经验分享程序猿的进阶屋

PHP7.3.2编译

2019-03-14  本文已影响0人  二手三流科学家

好的策略是首先执行PHP源码的configure脚本,
然后遇到zlib报错
configure: error: Please reinstall the libzip distribution
再使用cmake安装zlib。这样可以规避cmake报错。

  1. 首先给出我的编译选项:

    # cat /etc/redhat-release
    #CentOS Linux release 7.5.1804 (Core)
    
    ./configure \
    --with-libdir=/lib64 \
    --enable-cli \
    --disable-cgi \
    --enable-fpm \
    #--with-fpm-acl \
    --with-fpm-user=nginx \
    --with-fpm-group=nginx \
    --disable-phar \
    --without-pear  \
    --disable-all \
    --enable-pdo  \
    --enable-mysqlnd \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-mysql-sock=/var/lib/mysql/mysql.sock \
    --enable-zip \
    --with-zlib \
    --with-zlib-dir \
    --with-pcre-jit \
    --with-pcre-regex \
    --with-iconv \
    --enable-ctype \
    --enable-json  \
    --enable-session \
    --enable-xml \
    --enable-libxml \
    --enable-simplexml \
    --enable-mbstring \
    --with-curl \
    --enable-fileinfo \
    --with-openssl \
    --with-gd \
    --with-webp-dir  \
    --with-jpeg-dir \
    --with-png-dir \
    --with-xpm-dir  \
    --with-freetype-dir
    
    make 
    make install
    
  2. 关于zlib的安装:
    自带的zlib或者yum安装的zlib版本太低。
    可以去官网下载最新版。使用Cmake编译。
    编译安装Cmake:

    yum install -y gcc-c++
    tar -xf cmake-3.13.4.tar.gz
    cd cd cmake-3.13.4
    ./bootstrap
    gmake 
    gmake install
    

    编译安装zlib:

    tar -xf libzip-1.5.1.tar.gz
    cd libzip-1.5.1
    mkdir build
    cd build
    cmake ..
    make 
    make install
    
  3. 环境配置

    #在源码包目录下
    #复制PHP配置文件
    cp php.ini-production /usr/local/lib/php.ini
    #复制php-fpm配置文件
    cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
    cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
    #php-fpm启动脚本复制
    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    
    #修改php.ini文件
    date.timezone = Asia/Shanghai
    #关于日志的说明:
    #如果在php.ini中没有定义error_log,PHP默认为空,
    #则会将错误日志写到Nginx中的error_log配置项指定的日志中
    #如果是`error_log = syslog`,会将日志写在/var/log/messages中
    #还是自己给出绝对路径吧。
    #有了php.ini中error_log,就不会把错误信息写进Nginx中的error_log指定文件了
    error_log = /var/log/nginx/php_errror.log
    
    #防止arbitrarily script injection
    cgi.fix_pathinfo=0
    #HTTP X-Powered-By头中不暴露php版本
    expose_php = Off
    
    #修改php-fpm配置文件
    #取消注释
    pid = run/php-fpm.pid
    #其实,即使php.ini和Nginx中都没有记录error_log
    #这个文件也不会记录日志
    error_log = log/php-fpm.log
    include=etc/php-fpm.d/*.conf
    
    #添加php-fpm服务和自启动
    chmod u+x /etc/init.d/php-fpm
    chkconfig --add php-fpm
    chkconfig php-fpm on 
    service php-fpm start/restart/status
    
  4. PS
    编译本版本7.3.2时,--enable-fileinfo需要较大内存,在我自己的单核1G阿里云主机上失败,提示内存不够。
    经测试得知,大约需要1300M左右内存。

    #给出临时SWAP分区
    dd if=/dev/zero of=/tmp/swapfile bs=1M count=500
    mkswap /tmp/swapfile
    swapon /tmp/swapfile
    #编译完成后,卸载临时SWAP分区
    swapoff /tmp/swapfile
    rm /tmp/swapfile
    

    如果没有安装autoconf的话,倒是不影响PHP安装,就是在make test后,发现Bug,选发送邮件,会报个错。
    为了优化GD库,可以加装ImageMagick这个php扩展。

    遗留问题:
    --with-fpm-acl这个选项的作用是什么?
    --with-pcre-jit这个选项的作用是什么?
    #Server version: 5.5.60-MariaDB MariaDB Server
    #find / -type s -name mysql.sock
    --with-mysql-sock=/var/lib/mysql/mysql.sock
    加上这个选项后,php.ini中的相关配置项:
    pdo_mysql.default_socket=
    mysqli.default_socket =
    依然为空,那我可不可以不加--with-mysql-sock编译项?
    回答,不行,使用localhost而非ip地址连接数据库时,
    会找这个socket文件。在编译时指定的值,会在phpinfo()
    展示出来,之所以php.ini中为空,是预留给以后修改的。

  5. 参考
    https://www.jianshu.com/p/324d9d86f19e
    https://secure.php.net/manual/en/install.unix.nginx.php
    https://blog.csdn.net/zhou16333/article/details/84152033

上一篇下一篇

猜你喜欢

热点阅读