macOS 10.15 Catalina Apache設置:多個PHP版本

第1部分:macOS 10.15 Catalina Web開發環境

在macOS上開發Web應用程序真是使人高興。有許多設置開發環境的選項,包括廣受歡迎的MAMP Pro,它在ApachePHPMySQL之上提供了一個不錯的UI 可是,有時MAMP Pro的速度變慢或版本過舊,或者因爲配置模板和非標準構建的限制性系統而表現不佳。php

在這樣的時代,人們常常尋找一種替代方法,幸運的是有一種替代方法,而且設置起來相對簡單。html

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

[ 2019年10月8日更新]已更新以反映macOS 10.15 Catalina的發佈[2019年1月10日
更新]已更新以從外部小桶添加回PHP 5.6PHP 7.0
[2018年12月12日更新]已更新以反映最新版本的PHP 7.3,以及從Brew中刪除的PHP 7.0git

若是您過去一直Homebrew/php輕按本指南,並但願升級到新Homebrew/core方法,則應該首先按照咱們的新升級Homebrew清理當前安裝github

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

XCode命令行工具

若是還沒有安裝XCode,則最好先安裝命令行工具,由於這些將由自制軟件使用:sql

$ xcode-select --install
複製

自制安裝

此過程在很大程度上依賴於名爲Homebrew的macOS軟件包管理器使用該brew命令能夠輕鬆地向Mac添增強大的功能,可是首先咱們必須安裝它。這是一個簡單的過程,可是您須要啓動Terminal/Applications/Utilities/Terminal)應用程序,而後輸入:shell

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製

只需按照終端提示操做,而後在須要的地方輸入密碼便可。這可能須要幾分鐘,可是完成後,一種快速的方法來確保已brew正確安裝,只需鍵入:macos

$ brew --version
Homebrew 2.1.13
Homebrew/homebrew-core (git revision 99f8; last commit 2019-10-08)
複製

您可能還應該運行如下命令,以確保全部配置均正確:apache

$ brew doctor
複製

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

Catalina必需的庫

在Catalina上全新安裝時,在遇到如下全部步驟時,我遇到了一些缺乏的庫。爲了使事情變得容易,請當即運行如下命令:

$ brew install openldap libiconv
複製

Apache安裝

最新的macOS 10.15 Catalina預先安裝了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.41_1: 1,652 files, 27.7MB
複製

如今咱們只須要配置一些東西,以便新的Apache服務器自動啓動

$ sudo brew services start httpd
複製

如今,您已經安裝了Homebrew的Apache,並將其配置爲使用特權賬戶自動啓動。它應該已經在運行,所以您能夠嘗試經過將其指向來在瀏覽器中訪問服務器http://localhost:8080,您應該會看到一個簡單的標頭,上面寫着「有效!」。

故障排除技巧

若是收到消息,代表瀏覽器沒法鏈接到服務器,請首先檢查以確保服務器已啓動。

$ ps -aef | grep httpd
複製

若是Apache已啓動並正在運行,則應該看到一些httpd進程。

嘗試使用如下命令從新啓動Apache:

$ sudo apachectl -k restart
複製

您能夠在從新啓動期間在新的「終端」選項卡/窗口中查看Apache錯誤日誌,以查看是否有任何無效或引發問題的內容:

$ tail -f /usr/local/var/log/httpd/error_log
複製

Apache是​​經過apachectl命令控制的,所以可使用一些有用的命令:

$ sudo apachectl start $ sudo apachectl stop $ sudo apachectl -k restart
複製

-k當即強制重啓,而不是在apache準備好並準備好時禮貌地要求重啓

Visual Studio程式碼

在過去的指南中,我老是提供使用TextEdit預安裝的默認應用程序來編輯文件的說明可是,這並非我用的本身,由於它是一個糟糕的編輯器,在測試個人Catalina指南時,我一直遇到編碼,查找行號等問題。更好的解決方案是簡單地安裝一個更好的編輯器。所以,請安裝功能強大且功能強大的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命令編輯文件可是,若是你想使用默認的 文本編輯應用程序進行編輯,您可使用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_rewritemod_rewrite.so經過刪除前導來搜索和取消註釋該行#

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
複製

用戶和組

如今,咱們將Apache配置指向Sites了主目錄中文件夾。可是,仍然存在一個問題。默認狀況下,apache以user daemon和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以確保您的配置更改已生效:

$ sudo apachectl -k restart
複製

若是在從新啓動Apache時收到錯誤消息,請嘗試刪除咱們以前設置的DocumentRoot和Directory名稱周圍的引號。

將您的瀏覽器指向http://localhost應該顯示新消息。若是您有工做,咱們能夠繼續!

PHP安裝

若是您已經經過Brew安裝了PHP,則須要先使用咱們的「 升級自制程序」指南清理設置,而後再繼續進行本節。

直到2018年3月,全部與PHP相關的Brew都由Homebrew/phptab 處理,但已棄用,所以如今咱們使用Homebrew/core軟件包中提供的功能。這應該獲得更好的維護,可是不那麼完整。

這兩個PHP 5.6PHP 7.0已被棄用,從啤酒刪除,由於他們是在支持,雖然它不建議在生產,有正當理由在開發環境中測試這些不受支持的版本。

請記住,Brew官方僅支持PHP 7.1至7.3,所以,若是您要安裝PHP 5.6PHP 7.0,則須要添加如下代碼:

$ brew tap exolnet/homebrew-deprecated
複製

咱們將經過安裝各類版本的PHP並根據須要使用簡單的腳本在它們之間進行切換來繼續。隨意排除您不想安裝的任何版本。

$ brew install php@5.6 $ brew install php@7.0 $ brew install php@7.1 $ brew install php@7.2 $ brew install php@7.3
複製

第一個將花費一些時間,由於它必須安裝大量的brew依賴項。後續的PHP版本將安裝得更快。

unlink在安裝PHP版本之間,您再也不須要每一個版本,由於默認狀況下它們未連接

另外,您可能須要根據須要調整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
複製

如今讓咱們切換回第一個PHP版本:

$ brew unlink php@7.3 && brew link --force --overwrite php@5.6
複製

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

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

php -v

PHP 5.6.40 (cli) (built: Apr 23 2019 11:14:34) 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
複製

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
複製

咱們一次只能有一個模塊處理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:

$ sudo apachectl -k stop $ sudo apachectl start
複製

驗證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腳本安裝到brew的標準中/usr/local/bin

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /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:/Library/Apple/usr/bin:/Library/Apple/bin
複製

若是看不到,則可能須要手動將其添加到路徑中。根據您的外殼使用的,您可能須要加入這一行~/.profile~/.bash_profile~/.zshrc咱們將假定您使用的是默認的bash shell,所以請將此行添加到.profile用戶目錄根目錄下的文件中(若是不存在,建立該文件):

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

測試PHP切換

完成這些步驟以後,您應該可以經過使用如下命令切換sphpPHP版本:PHP版本:

$ sphp 7.1
複製

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

Switching to php@7.1
Switching your shell
Unlinking /usr/local/Cellar/php@5.6/5.6.40... 319 symlinks removed Unlinking /usr/local/Cellar/php@7.0/7.0.33... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.32_1... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.2/7.2.23... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.3.10... 208 symlinks removed Linking /usr/local/Cellar/php@7.1/7.1.32_1... 25 symlinks created If you need to have this software first in your PATH instead consider running: echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc You will need sudo power from now on Switching your apache conf Restarting apache PHP 7.1.32 (cli) (built: Oct 6 2019 20:44:48) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.32, Copyright (c) 1999-2018, by Zend Technologies All done! 
複製

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

更新PHP和其餘Brew軟件包

Brew使更新PHP和您安裝的其餘軟件包很是容易。第一步是更新 Brew,以獲取可用更新的列表:

$ brew update
複製

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

$ brew upgrade
複製

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

激活特定/最新的PHP版本

因爲咱們的PHP鏈接設置的方式,PHP的只有一個版本是在一個時間,只有當前活躍的 PHP版本將更新到最新版本。您能夠經過鍵入如下內容查看當前的活動版本:

$ php -v
複製

您能夠經過鍵入如下命令查看PHP軟件包的特定版本:

$ brew info php@7.1
  php@7.1: stable 7.1.32 (bottled) [keg-only] General-purpose scripting language https://www.php.net/ /usr/local/Cellar/php@7.1/7.1.32_1 (513 files, 62.9MB) * Poured from bottle on 2019-10-08 at 18:21:32 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/php@7.1.rb ==> Dependencies Build: httpd ✔, pkg-config ✘ Required: apr ✔, apr-util ✔, aspell ✔, autoconf ✔, curl-openssl ✔, freetds ✔, freetype ✔, gettext ✔, glib ✔, gmp ✔, icu4c ✔, jpeg ✔, libpng ✔, libpq ✔, libtool ✔, libzip ✔, mcrypt ✔, openldap ✔, openssl@1.1 ✔, sqlite ✔, tidy-html5 ✔, unixodbc ✔, webp ✔ ...
複製

好的,到此結束了這3部分系列的第1部分。如今,您已經具備功能齊全的Apache 2.4安裝,而且能夠經過快速簡便的方法在PHP 5.六、7.0、7.一、7.2和7.3之間進行切換。查閱第2部分,瞭解如何使用MySQL虛擬主機APC緩存,YAMLXdebug設置環境能夠參考第3部分,瞭解如何爲Apache虛擬主機設置SSL

相關文章
相關標籤/搜索