%20%E5%92%8C%20CLI%20%E4%B8%AD%E7%9A%84%20PHP%20%E7%89%88%E6%9C%AC%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
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_module
Apache 設定檔中存在另一個指令,它取代了您設定該行的值。
我建議您仔細查看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 路徑,並檢查這些 ^^ 內容。