如何在Arch Linux上从源代码编译PHP7.0 / PHP7.1
本教程向您展示如何在Arch Linux上编译PHP7.0 / PHP7.1并将其与PHP7.2一起安装。 Arch Linux是具有最新,最强大软件的滚动发行版本。 PHP7.2登陆Arch Linux仓库。 某些Web应用程序(如WordPress)可与PHP7.2很好地配合使用,但其他诸如NextCloud之类的应用程序当前不支持PHP7.2。 据说即将发布的NextCloud版本– NextCloud 13 –与PHP7.2兼容。
昨天我在Arch Linux服务器上进行了升级,这导致PHP7.2取代了PHP7.1,并且我的NextCloud Web界面停止工作。 AUR(Arch用户存储库)提供PHP7.0。 我尝试使用Yaourt进行安装,但是签名验证失败,因此我只能选择自己编译PHP7.0 / PHP7.1。
如何在Arch Linux上编译PHP7.0 / PHP7.1
首先,升级所有软件。
sudo pacman -Syu
安装wget并下载PHP源代码。 我使用最新版本的PHP7.0。 用您的首选版本替换版本号。
sudo pacman -S wget wget http://php.net/distributions/php-7.0.26.tar.gz
提取压缩包。
tar xvf php-7.0.26.tar.gz
将CD放入新创建的目录。
cd php-7.0.26
安装构建工具和依赖项。
sudo pacman -S gcc make bison gawk re2c libxml2 libwebp freetype2 c-client libmcrypt libxslt
使用以下参数配置环境。 复制整个命令并将其粘贴到您的终端窗口中。
./configure --prefix=/opt/php-7.0.26 --with-config-file-path=/opt/php-7.0.26/etc --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=http --with-fpm-group=http --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
完成后,让我们使用make命令编译PHP7。 将2替换为计算机上的CPU内核数。 默认 make
使用1个核心,您可以使用所有可用的核心来加快编译过程。
make -j2
编译过程可能需要一些时间,具体取决于您的CPU能力。 完成后,运行测试。
make test
现在安装PHP。 安装目录为 /opt/php-7.0.26/
。
sudo make install
从屏幕截图中,我们可以看到PHP-FPM二进制文件已安装到 /opt/php-7.0.26/sbin/
并且PHP-FPM配置目录是 /opt/php-7.0.26/etc/
。 在运行PHP-FPM之前,我们需要创建PHP-FPM配置文件。 有两个样本配置文件,因此我们可以复制它们。
sudo cp /opt/php-7.0.26/etc/php-fpm.conf.default /opt/php-7.0.26/etc/php-fpm.conf sudo cp /opt/php-7.0.26/etc/php-fpm.d/www.conf.default /opt/php-7.0.26/etc/php-fpm.d/www.conf
编辑 www.conf
配置文件。
sudo nano /opt/php-7.0.26/etc/php-fpm.d/www.conf
默认情况下,PHP-FPM在TCP套接字127.0.0.1:9000上侦听,我们可以使其在Unix套接字上侦听。 找到以下行。
listen = 127.0.0.1:9000
在开头添加分号以将其注释掉。 然后在其下面添加以下行。
listen = /run/php-fpm/php7.0-fpm.sock
接下来,找到以下3行并将其取消注释。
;listen.owner = http ;listen.group = http ;listen.mode = 0660
保存并关闭文件。 接下来复制php.ini文件。
sudo cp ~/php-7.0.26/php.ini-production /opt/php-7.0.26/etc/php.ini
编辑文件。
sudo nano /opt/php-7.0.26/etc/php.ini
在文件底部添加以下内容。
include_path = "/opt/php-7.0.26/lib/php"
保存并关闭文件。 现在,我们可以使用以下命令启动PHP-FPM:
sudo /opt/php-7.0.26/sbin/php-fpm
建立系统服务单位
为PHP7.0创建Systemd服务单元。
sudo nano /etc/systemd/system/php7.0-fpm.service
将以下行复制并粘贴到文件中。
[Unit] Description=The PHP FastCGI Process Manager After=network.target [Service] Type=simple PIDFile=/run/php-fpm/php7.0-fpm.pid ExecStart=/opt/php-7.0.26/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.26/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target
保存并关闭文件。 现在我们可以终止当前正在运行的PHP7.0-FPM并通过systemd运行它。 查找PHP7.0-FPM主进程的PID。
ps aux | grep php-fpm
如您所见,我的机器上的PID是5066。 所以我可以用以下方法杀死它:
sudo kill 5066
请注意,PHP7.2-FPM二进制文件也被命名为 php-fpm
如果使用 pkill php-fpm
,那么PHP7.2-FPM和PHP7.0-FPM都将停止。 现在通过systemd启动php7.0-fpm。
sudo systemctl start php7.0-fpm
在启动时启用自动启动。
sudo systemctl enable php7.0-fpm
检查其状态。
systemctl status php-fpm
使Nginx使用PHP7.0-FPM
要使Nginx使用PHP7.0而不是PHP7.2,请打开Nginx服务器阻止文件,找到以下行。
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
更改为
fastcgi_pass unix:/run/php-fpm/php7.0-fpm.sock;
此行可能有多个实例。 您需要全部更改。 然后做 http
(Arch Linux上的Web服务器用户)作为以下所有者的所有者 /run/php-fpm/php7.0-fpm.sock
文件。
sudo chown http:http /run/php-fpm/php7.0-fpm.sock
测试Nginx配置。
sudo nginx -t
如果测试成功,请重新加载Nginx以使更改生效。
sudo systemctl reload nginx
而已! 我希望本教程可以帮助您在Arch Linux上从源代码编译PHP7.0 / 7.1。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多有用的提示和技巧。