如何更改 Apache2 使用的 PHP 版本?

如何更改 Apache2 使用的 PHP 版本?

Ubuntu 10.04、MySQL 5.1、Apache 2.2 和 PHP 5.2/5.3:

我剛剛發現我在 CRM 應用程式中使用了錯誤版本的 PHP。一旦我弄清楚如何製作一個簡單的phpinfo()腳本來告訴我 Apache2 正在使用什麼,我就嘗試更改它php.ini,以便我的網頁伺服器將使用我想要的 PHP。嗯,這是我的問題。不知道該怎麼做。

我在這裡編譯了我想要的 PHP 版本/etc

/etc/php-5.2.8/

在其中,有一個php.ini-recommended文件,我對其進行了一些更改並重命名,php.ini以便 PHP 可以使用它。但是當我打開瀏覽器並清除歷史記錄並訪問該http://localhost<CRM dir>/install.php地址時,嚮導仍然說我沒有使用正確的 PHP 版本。

基於 這個帖子我需要做什麼才能更改運行腳本後顯示的 PHP 版本test.php?換句話說,phpinfo()我正在運行 PHP 5.3.2,但我想將其更改為我編譯的 5.2.8 版本,位於/etc.

答案1

根據您的伺服器,您應該查看 Apache,而不是 PHP。

(用於 RHEL/CentOS)查看/etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

您將看到您的 PHP 模組是modules/libphp5.so.

AddHandler php5-script .php告訴 Apache 在任何擴展名為.php.

如果您使用基於 RPM 的作業系統,則卸載(假設您可以這樣做)當前版本的 PHP,然後重新安裝您正在尋找的版本可能會更容易。

rpm -qa | grep php

將顯示目前安裝的 PHP 版本。

答案2

如果您已經安裝了另一個版本的 php,則只需更改 apache 使用的 php* 模組即可。

例如,我有php5和php7.0。當我想讓apache使用php7.0時,我只需要啟用他的模組並停用php5模組。

sudo a2dismod php5
sudo a2enmod php7.0

答案3

有兩種主要方法可以安裝新的 PHP 版本並告訴 Apache 使用它:mod_phpphp-fpm

筆記:首選方法是php-fpm,許多新發行版(包括 Fedora)都預設使用它。

將 PHP 安裝為 Apache SAPI 模組

這裡是關於 Unix 系統的指南,來自官方文件。它有一些缺失的點(至少對於我的設定而言),所以我逐步完成以下步驟:

  1. 從原始碼建立 PHP。在該./configure步驟中,使用--with-apxs2.這將為您建立共享的 Apache 2 處理程序模組。

    確保您apxs的路徑中定義了命令,或將其路徑指定為選項的值(即--with-apxs2=/path/to/apxs)。

    例如,如果您在系統範圍內安裝了 Apache,並且也想在 Fedora 及其衍生產品上安裝此命令(例如在本機環境中),則可以透過下列方式安裝:

    sudo dnf install httpd-devel
    
  2. 建置完成後(即在make或 之後make test),運行make install(也許以 root 身份運行)。顯然,這會將 PHP 安裝到您指定的路徑(即使用--prefix)。

    由於選項的原因,在安裝 PHP 之前要做的是--with-apxs2安裝 PHP apache2handler SAPI 模組。它透過將以下行之一新增至 Apache 設定檔來準備共用物件(例如在 中/usr/lib64/httpd/modules/libphp.so)並啟動模組(例如在 中),具體取決於您安裝的 PHP 版本(該行插入在「動態共用」部分下方)/etc/httpd/conf/httpd.conf物件(DSO)支援」):

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    筆記:在開啟 PHP 版本(特別是主要版本)時,請記住檢查是否只有其中一個LoadModulePHP 版本可用,否則 Apache 伺服器會拒絕啟動。

將 PHP 安裝為 PHP-FPM(FastCGI 進程管理器)

待定。 :)

最後步驟

PHP 8.0 以上額外步驟

如果您的發行版尚不支援 PHP8(例如 Fedora 34)並且您從套件管理器安裝了 Apache2,則您應該再執行一步。

問題是,從 PHP 8.0 開始,Apache2 對 SAPI 模組使用與先前不同的識別碼。這些標識符用於檢測您是否在設定檔中使用mod_php或, 。php-fpm對於 PHP5,它是php5_modulemod_php5;對於 PHP7,它是php7_modulemod_php7,對於 PHP8,它是php_modulemod_php

在這種情況下,導覽至 Apache2 設定目錄(例如/etc/httpd),然後開始編輯檔案conf.d/php.conf。那裡有兩個IfModule部分:一個用於php-fpm在不使用時啟用mod_php,另一個用於mod_php在使用時啟用(即LoadModule在配置中的某個位置使用)。您應該更新這些條件以涵蓋 PHP8。

例如,考慮以下情況:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

您應該在核心配置周圍再添加一個IfModule部分,如下所示:

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

對啟用器配置部分也執行相同的操作mod_php

最後一步

重新啟動 Apache 服務:

service httpd restart

現在,phpinfo()應該會顯示您剛安裝的新 PHP 版本。你現在應該很高興。 :)

答案4

我遇到了同樣的問題,即使我已經升級到版本 7.3,phpinfo() 仍會顯示版本 7.0。事實證明我只需要重新啟動阿帕契

sudo systemctl restart httpd在centos7上用過

相關內容