如何安装PHP在CentOS 8

PHP是最常用的服务器端编程语言之一。有许多流行的CMS和框架,例如WordPress,Magento和Laravel都是用PHP构建的

6 min read
By myfreax
如何安装PHP在CentOS 8

PHP全称Hypertext Preprocessor是一种开源的通用脚本语言,尤其适用于网络开发并可嵌入HTML中使用。易于一般程序员学习。

PHP的主要目标是允许网络开发人员快速编写动态页面。PHP是最常用的服务器端编程语言之一。有许多流行的CMS和框架,例如WordPress,Magento和Laravel都是用PHP构建的。

在本教程中,我们将说明如何在CentOS 8上安装PHP 7.2、7.3或7.4。包括使用dnf命令从CentOS存储安装PHP 7.2版本,启用Remi存储库并安装PHP的新版本,配置Nginx与PHP以及PHP-FPM,创建Nginx虚拟主机代理PHP-FPM FastCGI服务器,如何测试Nginx配置文件。在选择要安装的PHP版本之前,请确保您的应用程序支持它。

安装PHP从CentOS存储

CentOS存储库默认版本是PHP 7.2版本。如果你PHP应用适用于PHP 7.2版本。可以使用以下dnf命令安装PHP。如果不适用可以参考从Remi存储库安装PHP的教程。

请以root或具有sudo权限的用户运行以下dnf命令安装PHP和opcache,gd,mysqlnd模块:

sudo dnf install php php-opcache php-gd php-curl php-mysqlnd

在安装PHP时,默认情况下还会安装PHP-FPM,即PHP的FastCGI进程管理器,并用作PHP的FastCGI服务器。当你使用PHP-FPM时,你PHP程序将由PHP-FPM执行。

如果你需要PHP-FPM运行你PHP应用,你需要启动PHP-FPM服务。以下systemctl命令将启动启动PHP-FPM服务,并在开机时自动启动:

sudo systemctl enable --now php-fpm

安装PHP从Remi存储库

PHP 7.2是CentOS 8存储库可安装的版本。该版本支持大多数PHP应用程序,但自2019年11月起将不再维护。但你可从Remi存储库中获得PHP 7.2之后的新版本。

如果您要安装发行版存储中PHP 7.2稳定版本,请跳过此步骤。但是如果你要安装PHP 7.3或7.4以及更新版本。

请以root或具有sudo权限的用户运行以下dnf命令来启用Remi存储库:

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm

以上命令还将启用EPEL存储库。安装完成后,运行以下dnf命令以获取所有可用PHP版本列表:

sudo dnf module list php

输出将显示所有可用php版本,这些版本之中还分为common,devel,minimal。默认下选中的是common。

Last metadata expiration check: 0:02:11 ago on Fri 18 Oct 2019 08:31:43 PM UTC.
CentOS-8 - AppStream
Name    Stream       Profiles                     Summary                 
php     7.2 [d][e]   common [d], devel, minimal   PHP scripting language  

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name    Stream       Profiles                     Summary                 
php     remi-7.2     common [d], devel, minimal   PHP scripting language  
php     remi-7.3     common [d], devel, minimal   PHP scripting language  
php     remi-7.4     common [d], devel, minimal   PHP scripting language  

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

默认的PHP版本设置为PHP 7.2。要安装较新的PHP版本,请使用dnf命令启用适合你的PHP版本。以下是安装不同PHP版本的命令。

PHP 7.3

sudo dnf module reset php
sudo dnf module enable php:remi-7.3

PHP 7.4

sudo dnf module reset php
sudo dnf module enable php:remi-7.4

至此,你已在CentOS服务器上安装PHP。

配置Nginx与PHP

默认情况下,PHP-FPM以apache用户身份运行,即PHP-FPM进程所拥有的权限和apache用户一样。为避免权限问题,我们将使用nginx用户运行PHP-FPM服务。

为此我们需要更改php-fpm的配置文件/etc/php-fpm.d/www.conf,请使用你喜欢的文件编辑器修改文件/etc/php-fpm.d/www.conf,在本教程中我们将使用vim编辑器打开文件/etc/php-fpm.d/www.conf

请以root或具有sudo权限的用户运行以下vim命令修改文件。

sudo vim /etc/php-fpm.d/www.conf

找到user = apachegroup = nginx并更改为user = nginx以及group = nginx。如下所示:

...
user = nginx
...
group = nginx
/etc/php-fpm.d/www.conf

完成后,保存文件并退出vim编辑器

在默认情况下/var/lib/php目录也是由apache用户所拥有,因此我们还需有更改/var/lib/php目录以及此目录下载所有文件的权限。

如果文件存在权限问题,Nginx服务器将会返回HTTP状态码为500内部服务器错误。这也是新手经常遇到的错误之一。

以下chown命令将递归修改目录/var/www/example.com目录下的所有文件,并归apache用户所拥有:

sudo chown -R root:nginx /var/lib/php

为了使修改后php-fpm配置文件生效,我们还需有重新启动PHP-FPM服务。每次更改配置文件都需要重启PHP-FPM服务。

运行以下systemctl命令重启PHP-FPM服务:

sudo systemctl restart php-fpm

至此,我们已经完成PHP-FPM的配置,接下来添加Nginx虚拟主机,让Nginx可以与PHP-FPM服务可以进行通讯。如果你还没安装Nginx,请参考我们教程如何在CentOS 8上安装Nginx

由于PHP-FPM是FastCGI服务器,Nginx默认支持FastCGI代理,因此我只需要在Nginx的Server上下文添加location转发以PHP结尾URL到PHP-FPM FastCGI服务器运行PHP程序,并返回PHP-FPM FastCGI服务器运行结果。

使用vim编辑器,创建文件/etc/nginx/conf.d/example.conf文件,Nginx将会在重启时自动加载该虚拟主机配置文件。

请以root或具有sudo权限的用户运行以下vim命令创建文件。

sudo vim /etc/nginx/conf.d/example.conf

复制并粘帖以下内容到/etc/nginx/conf.d/example.conf文件中。这是Nginx整合PHP-FPM最简单虚拟主机文件:

server {

   serverName example.com;
   root /var/www/html/;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

当你完成对Nginx配置文件修改后,第一件事是首先测试所有Nginx配置文件的语法是否正确,不是重启Nginx以验证配置是否可用。

nginx命令提供一个选项-t可用于对配置文件语法的验证,使用以下nginx命令测试配置文件的语法是否正确:

sudo nginx -t

如果配置没有错误,输出将如下所示:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

接下来使用systemctl命令重启Nginx:

sudo systemctl restart nginx

结论

可从默认的CentOS 8存储库安装PHP 7.2。如果要安装最新版本,则需要启用Remi存储库。如果您有任何问题或反馈,请随时发表评论。