macOS 11.0 Big Sur Apache設置:多個PHP版本


第1部分:macOS 11.0 Big Sur Web開發環境

在macOS上開發Web應用程序真是一件樂事。有許多設置開發環境的選項,包括廣受歡迎的MAMP Pro,它在ApachePHPMySQL之上提供了一個不錯的UI 但是,有時MAMP Pro的速度變慢或版本過舊,或者由於其受限的配置模板系統和非標准構建而表現不佳。

在這樣的時代,人們經常尋找一種替代方法,幸運的是有一種替代方法是相對簡單的。

在此博客文章中,我們將引導您完成設置和配置Apache 2.4多個PHP版本的過程在這個兩篇文章系列的第二篇博客文章中,我們將介紹MySQLApache虛擬主機APC緩存和Xdebug安裝。

2019年11月27日更新以添加有關PHP 8.0的一些信息
2020年11月13日 更新以反映macOS 11.0 Big Sur的發布
12/02/2019更新以反映最新版本的PHP 7.4,以及從官方官方網站上刪除的PHP 7.1
12/02/2019更新以反映最新版本的PHP 7.4,以及從官方官方網站上刪除的PHP 7.1
10/08/2019 更新以反映macOS 10.5 Catalina的發布
01/10/2019更新以從外部已棄用的小桶中添加回PHP 5.6PHP 7.0
12/12/2018更新以反映最新版本的PHP 7.3從Brew中刪除的PHP 7.0

如果您過去一直Homebrew/php輕按本指南,並希望升級到新Homebrew/core方法,則應該首先按照我們的新升級Homebrew清理當前安裝

本指南適用於經驗豐富的Web開發人員如果您是新手開發人員,則使用MAMP或MAMP Pro會更好

XCode命令行工具

如果尚未安裝XCode,則最好先安裝命令行工具,因為這些將由自制軟件使用:

xcode-select --install

自制安裝

此過程嚴重依賴於名為Homebrew的macOS軟件包管理器使用該brew命令可以輕松地向Mac添加強大的功能,但是首先我們必須安裝它。這是一個簡單的過程,但是您需要啟動Terminal/Applications/Utilities/Terminal)應用程序,然后輸入:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

只需按照終端提示操作,然后在需要的地方輸入密碼即可。這可能需要幾分鍾,但是完成后,一種快速的方法來確保已brew正確安裝,只需鍵入:

brew --version
Homebrew 2.5.10 Homebrew/homebrew-core (git revision 542ff0; last commit 2020-11-13)

您可能還應該運行以下命令,以確保所有配置均正確:

brew doctor

它會指導您是否需要更正任何內容。

大蘇爾必備圖書館

在Big Sur上全新安裝時,在遇到以下所有步驟時,我遇到了一些缺少的庫。為了使事情變得容易,請立即運行以下命令:

brew install openssl

Apache安裝

aa最新的macOS 11.0 Big Sur預裝了Apache 2.4,但是,將此版本與Homebrew一起使用不再是一項簡單的任務,因為Apple已在此發行版中刪除了一些必需的腳本。但是,解決方案是通過Homebrew安裝Apache 2.4,然后將其配置為在標准端口(80/443)上運行。

如果您已經在運行內置的Apache,則需要先將其關閉,並刪除所有自動加載腳本。只需按順序運行所有這些命令,即使是全新安裝,也沒有什么壞處:

sudo apachectl stop sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

現在,我們需要安裝Brew提供的新版本:

brew install httpd

沒有選項,httpd不需要從源代碼構建,因此安裝非常迅速。完成后,您應該會看到以下消息:

🍺  /usr/local/Cellar/httpd/2.4.46: 1,658 files, 27.9MB

現在,我們只需要配置一些東西,即可自動啟動新的Apache服務器。

brew services start httpd

現在,您已經安裝了Homebrew的Apache,並將其配置為使用特權帳戶自動啟動。它應該已經在運行,因此您可以嘗試通過將其指向來在瀏覽器中訪問服務器http://localhost:8080,您應該看到一個簡單的標頭,上面寫着“有效!”。

故障排除技巧

如果收到消息,表明瀏覽器無法連接到服務器,請首先檢查以確保服務器已啟動。

ps -aef | grep httpd

如果Apache已啟動並正在運行,則應該看到一些httpd進程。

嘗試使用以下命令重新啟動Apache:

brew services restart httpd

您可以在重新啟動期間在新的“終端”選項卡/窗口中查看Apache錯誤日志,以查看是否有任何無效或引起問題的內容:

tail -f /usr/local/var/log/httpd/error_log

Apache是​​通過brew services命令控制的,因此可以使用一些有用的命令:

$ brew services stop httpd
$ brew services start httpd
$ brew services restart httpd

Visual Studio程式碼

在過去的指南中,我總是提供使用TextEdit預安裝的默認應用程序來編輯文件的說明但是,這並不是我用的,因為它是一個糟糕的編輯器,在測試Big Sur指南時,我一直遇到編碼,查找行號等問題。更好的解決方案是簡單地安裝一個更好的編輯器。因此,請安裝功能強大且功能強大的100%免費Visual Studio Code。它可在Mac,Windows和Linux上使用,但現在我們只關心mac版本。

轉到Visual Studio Code網站,然后單擊“ Mac下載”

下載后,將應用程序拖到您喜歡的“應用程序”位置。接下來,您要安裝命令行工具,因此請按照官方的逐步說明進行操作,以便可以code從終端使用命令。

Apache配置

現在我們有了一個可以正常工作的Web服務器,我們要做的就是進行一些配置更改,以便它可以更好地用作本地開發服務器。

在最新版本的Brew中,您必須手動將監聽端口從默認值設置808080,因此我們將需要編輯Apache的配置文件/usr/local/etc/httpd/httpd.conf

如果按照上面的說明進行操作,則應該可以使用Visual Studio Code通過codeTerminal命令編輯文件但是,如果要使用默認的 TextEditor應用程序執行編輯,則可以使用open -e命令,后跟文件的路徑。

code /usr/local/etc/httpd/httpd.conf

VSC

找到那行說

Listen 8080

並將其更改為80

Listen 80

接下來,我們將其配置為使用來更改Apache文檔根目錄這是Apache用來提供文件的文件夾。默認情況下,文檔根目錄配置為/usr/local/var/www因為這是一台開發機,所以假設我們要更改文檔根目錄以指向我們自己的主目錄中的文件夾。

搜索術語DocumentRoot,您應該看到以下行:

DocumentRoot "/usr/local/var/www"

將其更改為指向您的用戶目錄,your_user目錄是您的用戶帳戶的名稱:

DocumentRoot /Users/your_user/Sites

您還需要<Directory>在DocumentRoot行下方更改標記引用。這也應該更改為也指向您的新文檔根目錄:

<Directory "/Users/your_user/Sites">

我們刪除了目錄路徑周圍的可選引號,因為TextEdit可能會嘗試將其轉換為智能引號,並在嘗試重新啟動Apache時導致語法錯誤。即使您在引號周圍進行編輯並將其保留在原處,保存文檔也可能導致其轉換並導致錯誤。

在同<Directory>一塊中,您將找到一個AllowOverride設置,應按以下步驟進行更改:

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

另外,我們現在應該啟用默認情況下已注釋掉的mod_rewrite搜索mod_rewrite.so和通過去除導致取消對該行#+/上線(這是一個快速的方法來取消注釋和評論的單個或多個行:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

用戶和組

現在,我們將Apache配置指向Sites了主目錄中文件夾。但是,仍然存在一個問題。默認情況下,apache以userdaemon和group的身份運行daemon嘗試訪問主目錄中的文件時,這將導致權限問題。httpd.conf文件的大約三分之一處,有兩個設置可用於設置UserGroupApache運行。更改以下內容以匹配您的用戶帳戶(替換your_user為您的真實用戶名),並使用以下一組staff

User your_user
Group staff

服務器名稱

Apache喜歡在配置中使用服務器名稱,但是默認情況下此服務器處於禁用狀態,因此請搜索:

#ServerName www.example.com:8080

並替換為:

ServerName localhost

網站文件夾

現在,您需要Sites在主目錄的根目錄中創建一個文件夾。您可以在終端或Finder中執行此操作。在這個新Sites文件夾中創建一個簡單的文件夾,index.html並在其中放置一些虛擬內容,例如:<h1>My User Web Root</h1>

mkdir ~/Sites echo "<h1>My User Web Root</h1>" > ~/Sites/index.html

重新啟動apache以確保您的配置更改已生效:

brew services stop httpd
brew services start httpd

如果重新啟動Apache時收到錯誤消息,請嘗試刪除我們之前設置的DocumentRoot和Directory名稱周圍的引號。

將您的瀏覽器指向http://localhost應該顯示新消息。如果您有工作,我們可以繼續前進!

確保您刪除了:8080我們先前使用端口。另外,您可能需要Shift+Reload清除瀏覽器緩存並提取新文件。

對非Sudo httpd服務啟動進行故障排除

當我找到常見問題的解決方案時,我將用更多的技巧和嘗試來更新本節。跳至#macos Discord聊天以獲得一些“實時”幫助。

今年,在macOS Big Sur中,我已經從使用切換為使用rootsudo啟動httpd(即使它以定義的用戶/組身份運行httpd.conf),對於從該版本升級到該版本的用戶來說,仍然存在問題。

我本人遇到了一些問題,但是能夠使其輕松工作,但是其他人報告了更多的問題。如果使用時Apache沒有啟動,請嘗試這些步驟brew services start httpd

首先,嘗試直接使用以下命令啟動Apache:

/usr/local/bin/httpd -k start

這會繞過brew services命令,並經常打印出特定問題。如果報告有關無法寫入日志文件的問題,請嘗試刪除所有當前的日志httpd日志文件:

rm -Rf /usr/local/var/log/httpd/*

然后嘗試重新開始。

如果您看到類似的消息Address already in use: AH00072: make_sock: could not bind to address,請嘗試將Listen配置更改httpd.conf為:

Listen 0.0.0.0:80

PHP安裝

如果您已經通過Brew安裝了PHP,則需要先使用我們的“升級自制程序”指南清理設置,然后再繼續進行本節。

直到2018年3月,所有與PHP相關的Brew都由Homebrew/phptab處理,但已棄用,因此現在我們使用Homebrew/core軟件包中提供的功能。這應該得到更好的維護,但包裝的完整性要差得多。

不推薦使用PHP 5.6PHP 7.0PHP 7.1因為它們不在支持范圍之內,並且已從Brew中刪除,盡管不建議將它們用於生產環境,但是有合理的理由在開發環境中測試這些不受支持的版本。為了使用icu4cand的最新版本,還需要“從源代碼構建”這些版本openssl

請記住,Brew官方僅支持PHP 7.2到7.4,但是這些都必須構建,這非常慢。對於本指南的最新版本,我們將使用來自@shivammahtur的新版本,因為已經預先構建了許多版本(包括PHP 8.0構建)。

PHP 8.0剛剛發布,您可以安裝它,但是兼容的PHP模塊完全可用可能需要一些時間。

brew tap shivammathur/php

我們將繼續安裝各種版本的PHP,並使用簡單的腳本在需要時在它們之間進行切換。隨意排除您不想安裝的任何版本。

brew install shivammathur/php/php@5.6 brew install shivammathur/php/php@7.0 brew install shivammathur/php/php@7.1 brew install shivammathur/php/php@7.2 brew install shivammathur/php/php@7.3 brew install shivammathur/php/php@7.4 brew install shivammathur/php/php@8.0

另外,您可能需要根據需要調整PHP的配置設置。常見的更改是內存設置或date.timezone配置。php.ini每個版本的PHP文件都位於以下目錄中:

/usr/local/etc/php/5.6/php.ini
/usr/local/etc/php/7.0/php.ini
/usr/local/etc/php/7.1/php.ini
/usr/local/etc/php/7.2/php.ini
/usr/local/etc/php/7.3/php.ini
/usr/local/etc/php/7.4/php.ini
/usr/local/etc/php/8.0/php.ini

此時,我強烈建議您關閉所有終端選項卡和窗口這將意味着打開一個新的終端以繼續下一步。強烈建議這樣做,因為現有終端可能會出現一些非常奇怪的路徑問題(相信我,我已經看到了!)。

我們已經安裝但未鏈接這些PHP版本。5.6例如,要切換到PHP ,我們可以輸入:

brew unlink php && brew link --overwrite --force php@5.6

快速測試我們的版本是否正確:

php -v
PHP 5.6.40 (cli) (built: Jul 2 2020 04:41:54) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

並切換到7.4

brew unlink php && brew link --overwrite --force php@7.4

並檢查它是否正確更改:

php -v
PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies

Apache PHP設置-第1部分

您已經成功安裝了PHP版本,但是我們需要告訴Apache使用它們。您將再次需要編輯/usr/local/etc/httpd/httpd.conf文件滾動到LoadModule條目的底部

如果您正確地遵循了本指南,則最后一個條目應該是您的mod_rewrite模塊:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

在此下方添加以下libphp模塊:

LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so
#LoadModule php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
#LoadModule php_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp.so

我們一次只能有一個模塊處理PHP,因此現在,我們將php@5.6所有注釋都注釋掉,而使我們的 條目保持注釋。這將告訴Apache使用PHP 5.6處理PHP請求。我們將在以后添加切換PHP版本的功能)。

另外,您必須顯式設置PHP的目錄索引,因此搜索此塊:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

並替換為:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

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

保存文件並停止Apache,然后再次啟動,現在我們已經安裝了PHP:

brew services stop httpd
brew services start httpd

驗證PHP安裝

測試PHP是否已按預期安裝和運行的最佳方法是利用phpinfo()這不是您想要留在生產機器上的東西,但是在開發環境中這是無價的。

只需使用此單行代碼info.php在您Sites/先前創建的文件夾中創建一個名為文件。

echo "<?php phpinfo();" > ~/Sites/info.php

將瀏覽器指向http://localhost/info.php,您應該會看到一個閃亮的PHP信息頁面:

如果您看到類似的phpinfo結果,那么恭喜!現在,您已經成功運行了Apache和PHP。您可以通過注釋LoadModule ... php@5.6 ...條目並取消注釋其他版本的注釋來測試其他PHP版本然后,只需重新啟動apache並重新加載同一頁面即可。

PHP切換器腳本

我們將Apache硬編碼為使用PHP 5.6,但我們確實希望能夠在版本之間進行切換。幸運的是,一些勤奮的人已經為我們完成了艱苦的工作,並編寫了一個非常方便的PHP切換器腳本

sphp腳本已更新為支持PHP 8.0如果要使用該版本,請重復以下過程以獲取最新版本。

我們將sphp腳本安裝到brew的標准中/usr/local/bin

curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw/0c36a5067fbd63e6a36700a6aaa119df0836bdfc/sphp.sh > /usr/local/bin/sphp chmod +x /usr/local/bin/sphp

檢查你的路徑

在安裝過程中,Homebrew應該已將其首選/usr/local/bin添加/usr/local/sbin到您的路徑中。通過鍵入以下內容進行快速測試:

echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

如果看不到此內容,請先嘗試關閉終端並重新啟動。如果這不起作用,請檢查文件路徑定義中是否/usr/local/bin之前/usr/bin 和/usr/local/sbin之后您可以通過輸入以下內容在外殼中臨時執行此操作:/usr/sbin~/.zshrc

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

測試PHP切換

完成這些步驟之后,應該可以使用以下命令切換sphpPHP版本:PHP版本:

sphp 7.1

您可能需要輸入管理員密碼,它應該給您一些反饋:

Switching to php@7.4
Switching to php@7.4 Switching your shell Unlinking /usr/local/Cellar/php@5.6/5.6.40... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.33... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.2/7.2.34... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.4.12... 24 symlinks removed Linking /usr/local/Cellar/php/7.4.12... 24 symlinks created Switching your apache conf Restarting apache PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies All done!

通過再次將瀏覽器指向,測試Apache是​​否正在運行PHP 7.4 http://localhost/info.php運氣好的話,您應該會看到以下內容:

對PHP切換進行故障排除

如果您已從本指南的先前版本升級並安裝了PHP8,則可能會看到如下消息:Unknown version of PHP. PHP Switcher can only handle arguments of: 5.6,7.0,7.1,7.2,7.3,7.4,則需要重新安裝sphp已更新腳本。

如果您收到有關PHP版本沖突的消息,則可能是水龍頭發生沖突。您將需要卸載以前的PHP版本,然后刪除舊的Tap,然后添加新的Tap,然后使用上述語法重新安裝PHP版本。例如:

brew untap exolnet/deprecated
brew tap shivammathur/php
brew install shivammathur/php/php@8.0

使用Grav CMS測試您的設置!

有什么比快速安裝和測試Grav更好的方法來測試新的強大設置。世界上最好的平面文件CMS😆!我們可以通過幾個快速的終端命令來做到這一點:

cd ~/Sites curl -OJL https://getgrav.org/download/core/grav-admin/latest
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 646 100 646 0 0 1664 0 --:--:-- --:--:-- --:--:-- 1664 100 10.5M 100 10.5M 0 0 8198k 0 0:00:01 0:00:01 --:--:-- 21.6M curl: Saved to filename 'grav-admin-v1.6.28.zip'

然后只需解壓縮zip文件:

unzip grav-admin-v1.6.28.zip

這會將zip解壓縮到一個~/Sites/grav-admin文件夾中。然后只需將瀏覽器指向以下目錄http://localhost/grav-admin

填寫相關信息以創建新的管理員用戶,只需單擊“創建用戶”即可進入管理員。無需其他步驟。

全做完了!!!!

更新PHP和其他Brew軟件包

Brew使更新PHP和您安裝的其他軟件包非常容易。第一步是更新Brew,以便獲得可用更新的列表:

brew update

這將吐出可用更新的列表以及所有刪除的公式。要升級軟件包,只需鍵入:

brew upgrade

您將需要切換到每個已安裝的PHP版本,然后再次運行update以獲取每個PHP版本的更新,並確保您正在運行所需的PHP版本。

激活特定/最新的PHP版本

由於我們的PHP連接設置的方式,PHP的只有一個版本是在一個時間,只有當前活躍的PHP版本將更新到最新版本。您可以通過鍵入以下內容查看當前的活動版本:

php -v

您可以通過輸入以下內容查看PHP軟件包的特定版本:

brew info php@7.4
PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies rhuk@macos-big-sur ~ % brew info php@7.4 php: stable 7.4.12 (bottled), HEAD General-purpose scripting language https://www.php.net/ /usr/local/Cellar/php/7.4.12 (497 files, 72.2MB) * Poured from bottle on 2020-11-13 at 11:57:43 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/php.rb License: PHP-3.01 ==> Dependencies Build: httpd ✔, pkg-config ✔ Required: apr ✔, apr-util ✔, argon2 ✔, aspell ✔, autoconf ✔, curl-openssl ✔, freetds ✔, gd ✔, gettext ✔, glib ✔, gmp ✔, icu4c ✔, krb5 ✔, libffi ✔, libpq ✔, libsodium ✔, libzip ✔, oniguruma ✔, openldap ✔, openssl@1.1 ✔, pcre2 ✔, sqlite ✔, tidy-html5 ✔, unixodbc ✔ ...

好的,到此結束了這3部分系列的第1部分。現在,您已經具有功能齊全的Apache 2.4安裝,並且可以通過快速簡便的方法在PHP 5.6、7.0、7.1、7.2、7.3、7.4和8.0之間進行切換。查看第2部分,了解如何使用MySQL虛擬主機APC緩存,YAMLXdebug設置環境另外,請看第3部分,以了解如何為Apache虛擬主機設置SSL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM