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_php
和php-fpm
。
筆記:首選方法是php-fpm
,許多新發行版(包括 Fedora)都預設使用它。
將 PHP 安裝為 Apache SAPI 模組
這裡是關於 Unix 系統的指南,來自官方文件。它有一些缺失的點(至少對於我的設定而言),所以我逐步完成以下步驟:
從原始碼建立 PHP。在該
./configure
步驟中,使用--with-apxs2
.這將為您建立共享的 Apache 2 處理程序模組。確保您
apxs
的路徑中定義了命令,或將其路徑指定為選項的值(即--with-apxs2=/path/to/apxs
)。例如,如果您在系統範圍內安裝了 Apache,並且也想在 Fedora 及其衍生產品上安裝此命令(例如在本機環境中),則可以透過下列方式安裝:
sudo dnf install httpd-devel
建置完成後(即在
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 版本(特別是主要版本)時,請記住檢查是否只有其中一個
LoadModule
PHP 版本可用,否則 Apache 伺服器會拒絕啟動。
將 PHP 安裝為 PHP-FPM(FastCGI 進程管理器)
待定。 :)
最後步驟
PHP 8.0 以上額外步驟
如果您的發行版尚不支援 PHP8(例如 Fedora 34)並且您從套件管理器安裝了 Apache2,則您應該再執行一步。
問題是,從 PHP 8.0 開始,Apache2 對 SAPI 模組使用與先前不同的識別碼。這些標識符用於檢測您是否在設定檔中使用mod_php
或, 。php-fpm
對於 PHP5,它是php5_module
和mod_php5
;對於 PHP7,它是php7_module
和mod_php7
,對於 PHP8,它是php_module
和mod_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上用過