源码包都放在/usr/local/src/下。安装目录均在/usr/local/下。
-
解压tar包&安装依赖包
cd /usr/local/src/ tar -xf php-7.3.5.tar.gz -C /usr/local/ tar -xf libzip-1.5.2.tar.gz -C /usr/local/ tar -xf cmake-3.14.4.tar.gz -C /usr/local/ #CentOS6 去掉systemd-devel #CentOS7中之所以安装systemd-devel是为了规避报错:系统不支持systemd yum install -y gcc libxml2-devel openssl-devel curl-devel libwebp-devel libjpeg-devel libpng-devel libXpm-devel freetype-devel systemd-devel
-
编译安装选项:
#CentOS6不要加--with-fpm-systemd选项 cd /usr/local/php-7.3.5/ ./configure \ --with-libdir=/lib64 \ --with-config-file-path=/usr/local/etc/php \ --with-config-file-scan-dir=/usr/local/etc/php/conf.d \ --enable-cli \ --disable-cgi \ --enable-fpm \ --with-fpm-systemd \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --enable-phar \ --with-pear \ --disable-all \ --enable-pdo \ --enable-mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-mysql-sock=/var/lib/mysql/mysql.sock \ --enable-hash \ --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
-
关于libzip的安装:
CentOS7自带的libzip版本太低。
去官网下载最新版。使用Cmake编译。编译安装Cmake:
cd /usr/local/cmake-3.14.4/ ./bootstrap make make install
编译安装libzip:
cd /usr/local/libzip-1.5.2/ mkdir build cd build cmake .. make make install
-
环境配置
#安装完成后, #php --ini #Configuration File (php.ini) Path: /usr/local/lib #Loaded Configuration File: (none) #Scan for additional .ini files in: (none) #Additional .ini files parsed: (none) #复制PHP配置文件 cp /usr/local/php-7.3.5/php.ini-production /usr/local/lib/php.ini #vim /usr/local/lib/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指定文件了 #如果没有事先创建目录,即使定义了这个选项, #还是不会写日志 mkdir /var/log/php chown nginx. /var/log/php error_log = /var/log/php/php_errror.log #防止arbitrarily script injection cgi.fix_pathinfo=0 #HTTP X-Powered-By头中不暴露php版本 expose_php = Off #如何看出php-fpm的配置文件应该放在哪里? #php-fpm #ERROR: failed to open configuration file '/usr/local/etc/php-fpm.conf': No such file or directory (2) #ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf' #ERROR: FPM initialization failed #得出,php-fpm默认的配置文件路径为/usr/local/etc/php-fpm.conf #find / -type f -name php-fpm.conf* #/usr/local/etc/php-fpm.conf.default #/usr/local/php-7.3.5/sapi/fpm/php-fpm.conf.in #/usr/local/php-7.3.5/sapi/fpm/php-fpm.conf #这几个文件基本都一样 #使用/usr/local/etc/php-fpm.conf.default cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf #vim /usr/local/etc/php-fpm.conf pid = run/php-fpm.pid error_log = /var/log/php/php-fpm_error.log include=etc/php-fpm.d/*.conf #然后 #php-fpm #WARNING: Nothing matches the include pattern '/usr/local/etc/php-fpm.d/*.conf' from /usr/local/etc/php-fpm.conf at line 143. #ERROR: No pool defined. at least one pool section must be specified in config file #ERROR: failed to post process the configuration #ERROR: FPM initialization failed cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf #如果提示不存在nginx这个用户, useradd -rs /bin/false nginx
-
php-fpm启动配置
如果在编译时添加了
--with-fpm-systemd
选项,只能选择Systemd
启动方式,如果没有添加,只能选择SystemV
启动方式。
CentOS6使用SystemV方式,CentOS7使用Systemd方式- SystemV
#php-fpm启动脚本复制 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm #添加php-fpm服务和自启动 chmod u+x /etc/init.d/php-fpm chkconfig --add php-fpm chkconfig php-fpm on service php-fpm start/restart/status
- Systemd
cp /usr/local/php-7.3.5/sapi/fpm/php-fpm.service /usr/lib/systemd/system/ systemctl enable php-fpm systemctl start php-fpm
-
PS
在编译PHP时,--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 -f /tmp/swapfile
-
遗留问题:
-
--with-fpm-acl
这个选项的作用是什么? -
--with-pcre-jit
这个选项的作用是什么?
-
-
参考