在 CentOS 7.4 上使用 PHP 7.x
此文章是關乎我近日所關注的一個問題:如何在 CentOS 7 預設的 httpd 伺服器上採用 PHP 7.0 或 7.1,卻不採用外置軟件庫或從源碼重新編譯 PHP?
答案是 軟件選集。在這裡我們會從新的 CentOS 安裝開始,進而設立一個執行 PHP 7.x 的網站。
首先,我們會安裝軟件選集的軟件庫(它是一個需要啟用的官方軟件庫)。
root @ centos7-vm: ~ # yum -y install centos-release-scl.noarch
此指令會在你的系統上部署一個新的軟件庫,它是 CentOS 的其中一個官方軟件庫。
安裝完成後,讓我們安裝 PHP 7 套件及 httpd 套件,連同它的插件。
root @ centos7-vm: ~ 24 # yum -y install rh-php72 rh-php72-php rh-php72-php-fpm httpd
為了要採用 php 7.2,我們將會使用 php-fpm,這是 建議的做法,並代替了 mod_php。既然如此,我們便採用 fpm 服務。此服務預設會在 900 埠上運行。要是你需要更改埠號,請開啟以下檔案:
/etc/opt/rh/rh-php72/php-fpm.d/www.conf
然後將下行修改:
listen = 127.0.0.1:9000
成為你所需的設定(例如:9002)。完成後,我們必須更改 selinux 的資料庫並加入 9002 為 httpd 服務的有效連接埠。
semanage port -a -t http_port_t -p tcp 9002
完成後,開啟 php-fpm 服務並在開機時啟動它:
{{{root @ centos7-vm: ~ 29 # systemctl enable rh-php72-php-fpm.service Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php72-php-fpm.service to /usr/lib/systemd/system/rh-php72-php-fpm.service. root @ centos7-vm: ~ 30 # systemctl start rh-php72-php-fpm.service root @ centos7-vm: ~ 31 # systemctl status rh-php72-php-fpm.service ● rh-php72-php-fpm.service - The PHP FastCGI Process Manager
- Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2019-11-07 01:04:34 UTC; 20min ago
- Main PID: 5202 (php-fpm)
Status: "Ready to handle connections" CGroup: /system.slice/rh-php72-php-fpm.service
- ├─30045 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf) ├─30046 php-fpm: pool www ├─30047 php-fpm: pool www ├─30048 php-fpm: pool www ├─30049 php-fpm: pool www └─30050 php-fpm: pool www}}}
現在我們須要設定 httpd 背景服務並告訢它利用此服務來處理 php 頁面。
讓我們在 /etc/httpd/conf.d/ 資料來建立名為 fpm.conf 的檔案,並放入以下內容:
{{{# PHP scripts setup ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html
Alias / /var/www/html/
DirectoryIndex index.php}}}
如此,apache 將會把所有以 .php 結尾的檔案傳送到我們的 php-fpm 服務,然後顯示所得結果。
為要確定一切正常,我們會在 /var/www/html 建立一個小頁面,提出 phpinfo 的要求
{{{root @ centos7-vm: ~ 1 # cat /var/www/html/index.php <?php phpinfo() ?> root @ centos7-vm: ~ 1 #}}}
切勿忘記這只是一個基本設置來確定你的安裝能運作。如果你需要實際應用於程式中,你或許應參考 此文章 調校你的 php 設定。
請勿忘記起動、啟用及加入你的 httpd 服務到防火牆:
{{{root @ centos7-vm: ~ 43 # systemctl enable httpd ; systemctl start httpd root @ centos7-vm: ~ 46 # firewall-cmd --add-service=http --permanent success root @ centos7-vm: ~ 47 # firewall-cmd --reload success}}}
現在我們若連線到該網站,它會顯示 php 已被正確地處理:
Translation of revision 7