為什麼 phpinfo() 和 CLI 中的 PHP 版本不同?

為什麼 phpinfo() 和 CLI 中的 PHP 版本不同?

phpinfo()我意識到和php -v(在 CLI 中)報告的 PHP 版本之間存在不匹配。

phpinfo():  5.5.24
php -v: 5.6.9

我正在 Mac OS X 10.10 (Yosemite) 上工作,並安裝了一個庫 ( php-version) 來嘗試管理 PHP 版本。

它報告我的筆記型電腦上安裝了 3 個不同的版本:

  5.4.41
  5.5.25
* 5.6.9

我想在 Apache 和 CLI 中設定相同版本的 PHP。

我該如何告訴 Apache 使用哪個 PHP 版本?

我嘗試在我的中寫下這一行httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

然後:

sudo apachectl restart

但這一切都無法解決問題...在我的 PHP 資訊中我仍然有:5.5.24

答案1

這裡的一些不同問題都隱藏在 PHP 版本混亂的概念之下,因此我們將盡可能清楚地解決每個問題。首先這個:

phpinfo()我意識到和php -v(在 CLI 中)報告的 PHP 版本之間存在不匹配。

phpinfo():  5.5.24
php -v: 5.6.9

PHP CLI 與 PHP Apache 模組不同。

正如我在回答中所解釋的這裡還有另一個問題, 請勿恐慌!如果您關心 Apache 伺服器使用的 PHP 版本,那麼 的輸出phpinfo()始終是您應該注意的。 Apache PHP 模組和 PHP 命令列二進位檔案是兩個不同的東西,互不干擾。

phpinfo()如果您擔心在 Apache 中設定正確的 PHP 模組版本,請注意輸出。

也就是說,在 Apache 中載入正確的 PHP 模組似乎仍然存在問題:

我嘗試在我的中寫下這一行httpd.conf

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

確保您的 Apache 伺服器正在載入正確的 PHP 模組。

雖然您所做的技術上看起來是正確的,但我認為這不起作用的唯一原因是LoadModule php5_moduleApache 設定檔中存在另一個指令,它取代了您設定該行的值。

我建議您仔細查看httpd.conf(我假設它位於此處/etc/apache2/httpd.conf),看看是否確實存在LoadModule php5_module您在編輯該文件時錯過或沒有註意到的另一個文件。查看 Mac OS X 10.9.5 中的等效文件,我發現該行已被註解掉(因為我不使用 Mac OS X Apache/PHP 設定),並且內容如下:

#LoadModule php5_module libexec/apache2/libphp5.so

當然,在你的情況下,它將被取消註釋。有關配置 Apache 和 PHP 進行 Web 開發的更多詳細信息可以在這個網站上找到

認真考慮使用 MAMP 作為 Mac OS X Apache/PHP 怪癖的替代方案。

現在,我不知道你想做什麼,但如果你在 Mac OS X 系統上進行 Web 開發,你應該認真考慮使用曼普而不是破解核心 Mac OS X Web 堆疊來讓事情運作。

MAMP 的好處是它是相當於 LAMP 堆疊的極度生產等級的 Mac OS X。由於它面向現實世界的 Web 開發,因此它的所有模組和組態設定都與人們應該設定的完全一樣。

Mac OS X 上的 Apache 和 PHP 的核心問題是軟體通常已經過時,配置/調整和管理很痛苦,並且在發生此類情況時調試也很麻煩。如果 Mac OS X 更新消除了您精心設定的 Apache 和 PHP 設定怎麼辦?你又回到原點了。

答案2

我找到了解決問題的方法。編輯後,/etc/apache2/httpd.conf我使用以下命令重新啟動 apache:

sudo apachectl restart

由於某種原因,使用此命令 Apache 不會取得更新httpd.conf並載入舊配置。

使用:

sudo apachectl -k stop
sudo apachectl -k start

對所有服務進行硬重啟,並讀取設定檔中的更新,最後讀取以下內容的新路徑php5_module

/usr/local/opt/php56/libexec/apache2/libphp5.so

還要感謝@Giacomo1968 他的解釋

答案3

在我的情況下(安裝了composer的windows伺服器),composer還在php.ini中硬編碼了各種php擴充的路徑(例如extension=C:/php7-3-27/ext/php_gd2.dll)。所以我也需要改變這些。這仍然沒有改變從 Apache 網頁呼叫的 phpinfo() 中顯示的版本。事實證明,composer 還將我的舊 php 版本資料夾新增至 PATH 環境變數中,因此我必須將其變更為指向我的新 PHP 資料夾,然後才能看到版本變更生效。

當然,您必須確保您的 httpd.conf 根據此線程中的其他答案進行更新。但如果這不起作用,請檢查 phpinfo() 中列出的 php.ini 路徑,並檢查這些 ^^ 內容。

相關內容