[18/6/2018更新]因爲Homebrew/php
點擊在2018年3月底被棄用,並將全部PHP公式移動到Homebrew/core
,咱們已經從新設計了咱們的指南,使用這個新的水龍頭。javascript
若是您過去一直遵循本指南 Homebrew/php
點擊,並但願升級到新的Homebrew/core
方法,而後您應該首先按照咱們新的升級自制程序清理您當前的安裝。php
這是咱們以前的OS X開發系列的更新版本。新發布的macOS 10.14 Mojave以及隨附的Brew更新與先前版本相比須要進行重大更改,所以須要對流程進行完全的改進。從macOS 10.12開始,咱們如今使用Homebrew的Apache而不是內置版本,可是這個新的appraoch更靈活,應該繼續使用以前的OS X版本。css
在macOS上開發Web應用程序真是一種樂趣。設置開發環境有不少選擇,包括廣受歡迎的MAMP Pro,它在Apache,PHP和MySQL之上提供了一個很好的UI 。可是,有時候MAMP Pro會出現速度減慢或過期的版本,或者因爲配置模板和非標準版本的限制性系統而致使行爲不佳。html
在這些時候,人們常常尋找替代方法,幸運的是有一種方法,而且設置相對簡單。java
在這篇博文中,咱們將引導您完成Apache 2.4和多個PHP版本的設置和配置。在這篇兩篇文章系列的第二篇博文中,咱們將介紹MySQL,Apache虛擬主機,APC緩存和Xdebug安裝。nginx
本指南適用於有經驗的Web開發人員。若是您是初學者,可使用MAMP或MAMP Pro更好地服務。git
若是您尚未安裝XCode,最好先安裝命令行工具,由於這些工具將由homebrew使用:github
$ xcode-select --install
這個過程在很大程度上依賴於名爲Homebrew的macOS包管理器。使用brew
命令您能夠輕鬆地爲您的mac添增強大的功能,但首先咱們必須安裝它。這是一個簡單的過程,但您須要啓動終端(/Applications/Utilities/Terminal
)申請而後輸入:shell
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
只需按照終端提示操做,並根據須要輸入密碼。這可能須要幾分鐘,但完成後,能夠快速確保已安裝brew
正確,只需輸入:apache
$ brew --version Homebrew 1.7.6 Homebrew/homebrew-core (git revision a1ed; last commit 2018-09-25)
您可能還應運行如下命令以確保正確配置全部內容:
$ brew doctor
若是您須要更正任何內容,它會指示您。
當在Mojave上安裝新鮮時,我遇到了一些在完成如下全部步驟時丟失的庫。爲了簡化操做,請當即運行:
$ brew install openldap libiconv
最新的macOS 10.14 Mojave預裝了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.35: 1,648 files, 26.9MB
如今咱們只須要配置一些東西,以便咱們的新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良好並準備就緒時禮貌地從新啓動
在過去的指南中,我老是提供使用默認編輯文件的說明 TextEdit
預安裝的應用程序。然而,這不是我本身使用的,由於它是一個糟糕的編輯器,在測試個人Mojave指南時,我一直遇到編碼問題,找到行號等。更好的解決方案是簡單地安裝一個更好的編輯器。所以,請安裝使人驚訝的多功能,100%免費的Visual Studio代碼。它能夠在Mac,Windows和Linux上使用,可是如今咱們只關心mac版本。
轉到Visual Studio代碼站點,而後單擊「 下載Mac版」
下載後,將應用程序拖到優先的應用程序位置。接下來,您要安裝命令行工具,所以請按照官方的分步說明進行操做,以便您可使用code
來自終端的命令。
既然咱們有一個可用的Web服務器,咱們想要作的是進行一些配置更改,以便它做爲本地開發服務器更好地工做。
在最新版本的Brew中,您必須手動設置默認的偵聽端口 8080
至 80
,因此咱們須要編輯Apache的配置文件。
/usr/local/etc/httpd/httpd.conf
若是您按照上面的說明操做,則應該可使用Visual Studio Code來編輯文件code
終端命令。可是,若是要使用默認的 TextEditor應用程序來執行編輯,則可使用open -e
命令後跟文件的路徑。
$ code /usr/local/etc/httpd/httpd.conf
找到說的那一行
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以用戶身份運行daemon
和小組 daemon
。嘗試訪問主目錄中的文件時,這將致使權限問題。大約三分之一的下來httpd.conf
文件有兩個設置來設置 User
和 Group
Apache將運行。更改這些以匹配您的用戶賬戶(替換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
應該顯示您的新消息。若是你有這個工做,咱們能夠繼續前進!
若是您經過Brew安裝了現有的PHP,則須要先使用咱們的升級Homebrew指南清理您的設置,而後再繼續本節。
咱們將繼續安裝PHP 5.6,PHP 7.0,PHP 7.1和PHP 7.2,並使用一個簡單的腳本在咱們須要時在它們之間切換。直到2018年3月底,全部與PHP相關的釀造工做都由Homebrew/php
選項卡,但已被棄用,因此如今咱們使用的是 Homebrew/core
包。這應該是一個更好的維護,可是一個不那麼完整的包。
$ brew install php@5.6 $ brew install php@7.0 $ brew install php@7.1 $ brew install php@7.2
第一個將花費一點時間,由於它必須安裝一堆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
咱們如今切換回第一個PHP版本:
$ brew unlink php@7.2 && brew link --force --overwrite php@5.6
此時,我強烈建議關閉全部終端選項卡和窗口。這將意味着打開一個新的終端繼續下一步。這是強烈推薦的,由於現有終端可能會出現一些很是奇怪的路徑問題(相信我,我已經看過了!)。
快速測試咱們的版本是否正確:
php -v PHP 5.6.38 (cli) (built: Sep 14 2018 22:30:40) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
您已成功安裝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
咱們一次只能有一個處理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>
如今咱們已經安裝了PHP,保存文件並中止Apache而後再次啓動:
$ sudo apachectl -k stop $ sudo apachectl start
測試PHP是否按預期安裝並運行的最佳方法是使用phpinfo()。這不是您想要留在生產機器上的東西,但它在開發環境中是很是寶貴的。
只需建立一個名爲的文件 info.php
在你的 Sites/
您以前使用此單行建立的文件夾。
echo "<?php phpinfo();" > ~/Sites/info.php
將瀏覽器指向 http://localhost/info.php
你應該看到一個閃亮的PHP信息頁面:
若是你看到相似的phpinfo結果,恭喜!您如今已成功運行Apache和PHP。您能夠經過註釋來測試其餘PHP版本LoadModule ... php@5.6 ...
進入並取消註釋其中一個。而後只需重啓apache並從新加載同一頁面。
咱們將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
若是您沒有看到這一點,則可能須要手動將這些添加到路徑中。根據您使用的shell,您可能須要添加此行~/.profile
, ~/.bash_profile
, 要麼 ~/.zshrc
。咱們假設您使用的是默認的bash shell,所以請將此行添加到您的.profile
(若是它不存在則建立它)文件位於用戶目錄的根目錄:
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
完成這些步驟後,您應該可使用該命令切換PHP版本 sphp
而後是PHP版本的兩位數值:
$ sphp 7.0
您可能須要輸入管理員密碼,它應該給您一些反饋:
$ sphp 70 Switching to php@7.0 Switching your shell Unlinking /usr/local/Cellar/php@5.6/5.6.38... 25 symlinks removed Unlinking /usr/local/Cellar/php@7.0/7.0.32... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.22... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.2.10... 0 symlinks removed Linking /usr/local/Cellar/php@7.0/7.0.32... 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.0/bin:$PATH"' >> ~/.bash_profile echo 'export PATH="/usr/local/opt/php@7.0/sbin:$PATH"' >> ~/.bash_profile You will need sudo power from now on Switching your apache conf Restarting apache PHP 7.0.32 (cli) (built: Sep 13 2018 23:23:13) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies All done!
經過再次指向瀏覽器來測試您的Apache如今是否正在運行PHP 7.0 http://localhost/info.php
。運氣不錯,你應該看到這樣的東西:
Brew使得更新PHP和您安裝的其餘軟件包變得很是容易。第一步是更新 Brew,以便獲取可用更新列表:
$ brew update
這將吐出可用更新列表和任何已刪除的公式。要升級包,只需鍵入:
$ brew upgrade
您須要切換到每一個已安裝的PHP版本並再次運行更新以獲取每一個PHP版本的更新,並確保您運行的是您想要的PHP版本。
因爲咱們的PHP鏈接設置的方式,PHP的只有一個版本是掛在一個時間,只有當前活躍的 PHP版本將更新到最新版本。您能夠經過鍵入如下內容來查看當前活動版本
$ php -v
您能夠經過鍵入如下內容來查看PHP的特定版本:
$ brew info php@7.0 php@7.0: stable 7.0.32 (bottled) [keg-only] General-purpose scripting language ...
好的,這包含了這個3部分系列的第1部分您如今擁有一個功能齊全的Apache 2.4安裝,能夠快速簡便地在PHP 5.6,7.0,7.1和7.2之間切換。查看第2部分,瞭解如何使用MySQL,虛擬主機,APC緩存,YAML和Xdebug設置環境。另請參閱第3部分,瞭解如何爲Apache虛擬主機設置SSL。