说明 为了满足我的一篇博文,我单独抽出来写一篇 PHP 的编译篇
下载 最好不要去 github 上下载,因为你不知道哪一个是稳定版,我们最好去官网寻找最新的稳定版下载
1 2 3 4 5 6 7 8 9 10 11 cd /usr/local/src/ sudo mkdir php cd php wget xxxxx.php -O php-xx.tar.gz tar -zxvf php-xx.tar.gz cd php-xx
在这里,我的 php 版本是 php-7.1.8
修改源码目录所有者
1 chown -R caiwh:caiwh php-7.1.8
进入目录
最小化安装的模块
curl扩展
(使用 curl 的 API)
–with-curl
fpm扩展
(管理 PHP 进程的服务)
–enable-fpm
openssl扩展
(打开 ssl 服务,很多服务都依赖这个,必须安装,例如:composer、mysql 的 ssl 等等)
–with-openssl
mysqlnd扩展
(mysql native drive)
–enable-mysqlnd
–mysql-pdo-mysql=mysqlnd
gd扩展
(可以操作图片)
–enable-gd
–with-jpeg-dir (GD 库默认不支持 jpeg 格式,需要额外的添加)
zlib扩展
(压缩解压缩服务)
–enable-zlib
–with-zlib
–with-libzip
mb扩展
(可以使用于 mb 系列的函数,例如汉字的截止之类的)
–enable-mbstring
socket扩展
(可以使用 socket 系列的函数)
–enable-sockets
x-debug扩展
(断点调试用,但是在生产环境不应该安装这个扩展,因为会拖底性能)
–enable-debug
readline扩展
(可以在 CLI 模式下直接交互,例如 php -a)
–enable-readline
最后的编译参数 1 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --enable-mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-jpeg-dir --with-curl --with-readline --with-openssl --with-zlib --with-libzip --enable-mbstring --enable-sockets --enable-bcmath --enable-fpm --with-fpm-user=phper --with-fpm-group=phper
好的,开始补类库的过程,这个时候,告诉我没有 libxm2,所以我又要去安装了,这里我们再次用 yum 安装
让我们先看看我们的源是否有这些包
OK,开始安装
1 sudo yum install libxml2-devel libxml2 -y
再次编译。
好的,我还没有安装 libcurl 类,同样的做法
1 sudo yum install libcurl-devel libcurl -y
再次编译。
还有一些问题,针对对应的类库安装对应的,这里就不一一列出来的,一次过写出来了
1 sudo yum install libjpeg-turbo-devel libjpeg-turbo libpng-devel libpng readline-devel readline -y
再次编译。
编译完成!!
安装 1 sudo make && make install
安装的速度取决你的服务器配置。
….Loading…. ….Loading…. ….Loading….
….Waiting…. ….Waiting…. ….Waiting….
安装完毕!!
配置 php-fpm
开始调试 php-fpm
讲一下几个重要的参数
-c 指定 php.ini 配置文件的路径
-y 指定 php-fpm.conf 配置文件的路径
-n 不用 php.ini 运行
好的,我们发现测试失败,说是没有配置文件,我们去这个目录下,发现又一个文件叫 php-fpm.conf.default
copy 一份出来,把 default 去掉
1 sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
开启 pid 文件
详细的配置文件也要弄一份出来
1 sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
测试通过。
因为我们用了 user=phper 和 group=phper 的用户去启动 php-fpm 的 worker 进程。所以,我要创建这么一个不可登录的用户
1 useradd -M -s /sbin/nologin -U phper
OK。
启动成功。完美。
把服务加入到 Systemctl 首先,需要这么一个 shell 脚本
1 2 3 cd /usr/local/php/sbin/ sudo vim php-fpm.sh
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 # ! /bin/sh # # Provides: caiwh[471113744@qq.com] # Short-Description: starts php-fpm # Description: starts the PHP FastCGI Process Manager daemon # prefix=/usr/local/php exec_prefix=${prefix} php_fpm_BIN=${exec_prefix}/sbin/php-fpm php_fpm_CONF=${prefix}/etc/php-fpm.conf php_fpm_PID=${prefix}/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN --daemonize $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-quit" exit 1 else echo " done" fi ;; status) if [ ! -r $php_fpm_PID ] ; then echo "php-fpm is stopped" exit 0 fi PID=`cat $php_fpm_PID` if ps -p $PID | grep -q $PID; then echo "php-fpm (pid $PID) is running..." else echo "php-fpm dead but pid file exists" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; configtest) $php_fpm_BIN -t ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}" exit 1 ;; esac
保存退出,然后修改权限
1 sudo chmod 755 php-fpm.sh
然后就可以写 systemctl 的 service 了。
1 sudo vim /usr/lib/systemd/system/php-fpm.service
把以下代码拷贝进去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [Unit] Description=Belong caiwh - php-fpm Documentation= /usr/local/php/etc/php-fpm/ After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStartPre=/usr/local/php/sbin/php-fpm.sh configtest ExecStart=/usr/local/php/sbin/php-fpm.sh start ExecReload=/usr/local/php/sbin/php-fpm.sh restart ExecStop=/usr/local/php/sbin/php-fpm.sh stop PrivateTmp=true [Install] WantedBy=multi-user.target
完成 systemctl 重启
然后就可以用
1 2 3 #1.systemctl start php-fpm 启动服务 #2.systemctl stop php-fpm 停止服务 #3.systemctl restart php-fpm 重启服务
完美结合