如何在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

从源代码编译php7

如您所见,我的机器上的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

从Arch Linux上的源代码编译php7

使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。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多有用的提示和技巧。

Sidebar