PHP7.3.2编译
好的策略是首先执行PHP源码的configure脚本,
然后遇到zlib报错
configure: error: Please reinstall the libzip distribution
,
再使用cmake安装zlib。这样可以规避cmake报错。
-
首先给出我的编译选项:
# 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
-
关于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
-
环境配置
#在源码包目录下 #复制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
-
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中为空,是预留给以后修改的。 -
参考
https://www.jianshu.com/p/324d9d86f19e
https://secure.php.net/manual/en/install.unix.nginx.php
https://blog.csdn.net/zhou16333/article/details/84152033