簡體   English   中英

Homebrew 安裝的 PHP7 不適用於 macOS 上的 Apache

[英]PHP7 installed by Homebrew doesn't work with Apache on macOS

我正在嘗試升級到我通過自制軟件安裝的 php7。

在 CLI 中 php -v 返回

PHP 7.0.10 (cli) (built: Aug 21 2016 19:14:33) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

但是對於localhost,firefox彈出加載頁面有問題,無法查看localhost/phpinfo.php; 如果我將模塊行換回 php5,它就可以正常工作。

這是我的 apache2/httpd.conf 的 pastebin http://pastebin.com/950yC7wA ,我不知道如何解決這個問題。

  • osx 版本 El Capitan 10.11

確保:

  • 您已按照brew info php@7.1的說明進行操作:

     ==> Caveats To enable PHP in Apache add the following to httpd.conf and restart Apache: LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so <FilesMatch \\.php$> SetHandler application/x-httpd-php </FilesMatch> Finally, check DirectoryIndex includes index.php DirectoryIndex index.php index.html
  • 您通過sudo apachectl restart重新啟動了 Apache。

有關分步教程,請參閱: 在 macOS Sierra 上使用 Homebrew 設置 Apache、MySQL 和 PHP

故障排除

  • 當某些事情不起作用時,請通過以下方式實時檢查日志:

     tail -f /usr/local/var/log/apache2/*error*

    然后啟動/重啟服務器。

    注意:完成后,按Control - C退出tail

雖然Homebrew是一個很好的工具,但有時它是不必要的。

我在關於在 Mac OS X安裝 Apache、PHP 和 MySQL 的帖子中提到,OS X 預裝了 Apache 和 PHP。 因此,您只需配置和啟用它們。

不幸的是,從 Mac OS 10.11 ( El Capitan ) 開始,PHP 版本仍然是 5.5。 我想這會隨着 10.12 ( Sierra ) 而改變,因為 PHP 5.5 是 EOL。 但是,它可能只是 PHP 5.6。

要安裝 PHP 7,我建議使用PHP OSX 他們為 PHP 版本 5.3 到 7.1(最新)提供軟件包安裝。 它適用於 Mac OS 10.6+ ( Snow Leopard )。

因為它是一個包安裝,所以它可以使用默認的 Apache 安裝開箱即用。 你只需要更新你的PATH並修改他們的 PHP ini 文件。 兩者都在他們的常見問題解答中進行了概述。

如果您想要更多的分步教程,請查看我最近關於在 Mac OS X更新 PHP 的帖子。

如果您在 OS X Sierra 上使用 Apache,默認情況下 php7 不再附帶 apache 模塊。

隨着 macOS Sierra 的發布,Apache 模塊現在不是默認構建的。 如果你想在你的系統上構建它,你必須使用 --with-apache 選項安裝 php。 有關更多詳細信息,請參閱 brew 選項 php70。

嘗試使用標志重新安裝:

brew reinstall php70 --with-apache

我遇到了同樣的問題,當我在/etc/apache2/httpd.conf注釋掉這一行時它就消失了

LoadModule php5_module libexec/apache2/libphp5.so

運行$ apachectl -t將顯示您當前配置的任何問題。 當我運行它時,我得到了這個:

httpd:/private/etc/apache2/httpd.conf 第 171 行的語法錯誤:無法將 /usr/local/opt/php70/libexec/apache2/libphp7.so 加載到服務器中:dlopen(/usr/local/opt/php70 /libexec/apache2/libphp7.so, 10):找不到符號:_ldap_control_find \\n 引用自:/usr/local/opt/php70/libexec/apache2/libphp7.so\\n 預期在:/System/Library/Frameworks/ LDAP.framework/Versions/A/LDAP\\n 在 /usr/local/opt/php70/libexec/apache2/libphp7.so

我可以確認發布在 github 上的此解決方法,安裝沒有 LDAP 支持的包將防止出現此錯誤:

brew reinstall php70 --without-ldap

不是您問題的直接解決方案,但我在 OS X 上遇到了無數的 php 問題。最近,我試圖在升級到 El Capitan 后讓 OCI 庫正常工作。

我現在已經放棄嘗試使用它並開始使用 docker 進行我的開發。 我發現它是一個更好的解決方案,您甚至可以在同一代碼庫上設置多個環境,這對於測試不同版本非常有用。

在 OS X 上安裝 Docker 真的很容易,並且在存儲庫中有大量可用的預構建容器,您只需安裝並將掛載點設置到源目錄並使用它提供的端口即可訪問。

我今天發現了一個新路徑來加載 httpd.conf 文件(/usr/local/etc/httpd/httpd.conf)中的不同 php 庫:

### OLD VERSION (NOT WORKING NOW)  ###
#LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so
#LoadModule php7_module    /usr/local/opt/php70/libexec/apache2/libphp7.so
#LoadModule php7_module    /usr/local/opt/php71/libexec/apache2/libphp7.so
#LoadModule php7_module    /usr/local/opt/php72/libexec/apache2/libphp7.so

### NEW VERSION ###
#LoadModule php5_module    /usr/local/opt/php56/lib/httpd/modules/libphp7.so
#LoadModule php7_module    /usr/local/opt/php70/lib/httpd/modules/libphp7.so
#LoadModule php7_module    /usr/local/opt/php71/lib/httpd/modules/libphp7.so
LoadModule php7_module    /usr/local/opt/php72/lib/httpd/modules/libphp7.so

我知道這是一個非常古老的話題,但是當您更新 PHP 時,您還需要更新 Apache confing - 例如:

LoadModule php5_module libexec/apache2/libphp5.so

更改為:

LoadModule php7_module libexec/apache2/libphp7.so

對於可能遇到此問題的人,請確保您能夠使用“apachectl restart”重新啟動 apache。 就我而言,我必須首先使用命令“httpd stop”停止 httpd 的所有進程,然后使用“apachectl start”啟動 apache。

我從 PHP 5.6 升級到 7.2 時遇到了類似的問題。

在 httpd.conf 中注釋掉LoadModule php5_module /usr/local/php5/libphp5.so並取消注釋LoadModule php7_module /usr/local/Cellar/php@7.2/7.2.22_1/lib/httpd/modules/libphp7.so

對我有用的真正技巧是當我運行以下命令來找出 Apache 加載的所有模塊時:

sudo /usr/sbin/httpd -t -D DUMP_MODULES

這是我發現 php7 和 php5 都被加載的地方。 在查看文件后,有一個額外的 conf 引用了 php5。

刪除該引用並重新啟動 apache 后,我就啟動並運行了。

您可以將 brew php 模塊添加到 MacOS Monterey apache。 正確執行所有步驟。

安裝 homebrew php (brew install php / brew install php@7.4) 並在 /etc/apache2/httpd.conf 中添加以下幾行后

LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
#LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so


<FilesMatch \.php$>
        SetHandler application/x-httpd-php
</FilesMatch>

重要提示:您需要通過運行以下命令來測試 apache2 配置。 如果你不運行它,你永遠不會明白為什么它不起作用。

sudo apachectl configtest

如果你得到一個錯誤,沒有像下面這樣的代碼簽名權限

[so:error] [pid 69894] AH06665: No code signing authority for module at /.../libphp[7].so specified in LoadModule directive.

您需要按照此處的教程或https://blog.phusion.nl/2020/12/22/future_of_macos_apache_modules/創建本地 CA 文件和證書,並使用以下命令對 libphp.so 文件進行簽名。 注意:用您的證書名稱替換 Ravi

codesign -s "Ravi" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
# codesign -s "Ravi" --force --keychain ~/Library/Keychains/login.keychain-db /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so

現在回到 /etc/apache2/httpd.conf 並像這樣在 LoadModule 行的末尾添加“Ravi”(您的證書名稱)

LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "Ravi"
#LoadModule php7_module /opt/homebrew/opt/php@7.4/lib/httpd/modules/libphp7.so "Ravi"

做完之后運行

sudo apachectl configtest

你應該看到最后(忽略通知行)

Syntax OK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM