注意如果這個軟體對您有用,我請您為儲存庫加註星標,這樣我就知道該軟體正在被使用。另外,請考慮贊助支持該項目,因為這是我在空閒時間製作的東西。謝謝你!
PHP Monitor (或phpmon )是一個輕量級 macOS 實用程式應用程序,可在 Mac 上運行並在狀態列中顯示活動的 PHP 版本。它與 Laravel Valet 緊密整合,因此如果您想使用應用程式的所有功能,則需要對其進行設定(請參閱下面的常見問題解答,以了解有關如何設定環境的資訊)。
螢幕截圖:顯示 PHP Monitor 的關鍵功能。
在不同版本的PHP之間切換超方便。您甚至會收到通知(當然,前提是您選擇加入)!
PHP Monitor 還可讓您快速存取各種有用的功能(例如存取設定檔、重新啟動服務等)。
您還可以新增網域作為連結、隔離網站、管理各種服務以及執行急救來修復各種常見的 PHP 連結問題。
PHP Monitor 是一款通用應用程序,可在 Apple Silicon和基於 Intel 的 Mac 上本機運行。
/usr/local/homebrew
或/opt/homebrew
)php
公式已安裝從 PHP Monitor 6.0 開始,您無需安裝 Laravel Valet 即可使 PHP Monitor 正常運作。然而,要存取 PHP Monitor 的所有功能,建議安裝 Valet。
有關更多信息,請參閱 SECURITY.md 以了解當前支援的應用程式版本。
再次強調,如果您想存取 PHP Monitor 的所有功能,我建議您先安裝Laravel Valet :
composer global require laravel/valet
valet install
valet trust
目前,PHP Monitor 與 Laravel Valet v2、v3 和 v4 相容。這些 Valet 版本中的每一個都支援略有不同的 PHP 版本,這就是為什麼舊版本仍然受支援的原因。請注意,舊版的 Valet 中不提供某些功能,例如網站隔離。
完成後,您可以下載最新版本,解壓縮並將其放置在/Applications
中。
在版本 5.8 之前,這是安裝 PHP Monitor 的建議方法。
如果您喜歡透過 Homebrew 安裝該應用程序,您還可以執行以下命令:
brew tap nicoverbruggen/homebrew-cask
brew install --cask phpmon
將應用程式更新到最新版本的建議方法是使用內建更新程式。
如果您的網路連線速度非常慢,更新程式可能會報告下載已逾時。在這種情況下,您可能希望透過下載最新版本並將應用程式放置在/Applications
中來手動更新。
(您也可以使用 Homebrew 更新 PHP Monitor,但這將要求您在每次安裝更新時批准應用程式。如果您使用內建更新程序,則不需要這樣做。)
如果您想與您選擇的啟動器集成,您還可以下載與 PHP Monitor 配合使用的 Alfred 工作流程或 Raycast 擴充功能。
應用程式必須在背景運行才能使這些功能正常工作,並且必須在首選項中啟用允許第三方整合複選框(預設)。
是的,該應用程式已簽署並經過公證,這意味著您所要做的就是批准其首次啟動(或每次更新)。
我希望能夠一目了然地看到連結的是哪個 PHP 版本,並在一個簡單的應用程式中處理 Laravel Valet,而不必每次都處理終端。
最初,我為此使用了一個 Alfred 工作流程,但現在它已被這個實用程式所取代,該實用程式還可以很好地一目了然地顯示附加信息,例如當前的 PHP 版本、記憶體限制等。
如果您不需要自訂本機 PHP 設置,而只是想要一個簡單且隨時可用的環境來開始編碼,那麼 Laravel Herd 可能足以滿足許多用例。
如果您需要更多的客製化和靈活性,我鼓勵您考慮將 PHP Monitor 與 Laravel Valet 或其他一些解決方案(例如 Docker)結合使用(例如與 Laravel Sail)。
PHP Monitor 會執行一些完整性檢查,以確保使用該應用程式時獲得良好的體驗。您將收到一則訊息,告訴您 PHP 監視器在多種情況下無法正常運作。
請按照警報中指定的說明進行操作,以解決任何問題。
(如果應用程式在啟動時崩潰而沒有向您顯示任何這些訊息,則您可能有非標準的 Homebrew 和 Valet 設定。這些不受支援。)
如果您遇到問題,您應該做的第一件事是安裝最新版本的 PHP Monitor和Laravel Valet。這可以解決多種問題。要升級 Valet,請執行
composer global update
。升級後不要忘記執行valet install
。
如果您仍然遇到問題,請參閱以下一些常見問題和解答以及問題和解決方案:
PHP Monitor 也支援所有穩定且支援的 PHP 版本。但是,根據您安裝的 Valet 版本,可用於切換的 PHP 版本可能會有所不同。
注意如果您安裝的 PHP 版本可以被 PHP Monitor 偵測到,但目前活動版本的 Valet不支持,您將收到選單中帶有感嘆號表情符號的項目的提醒。 (
)
可透過 PHP Monitor 的PHP 版本管理器功能安裝的向後移植取決於此水龍頭的可用性。
可透過 PHP Monitor 的PHP 擴充管理器功能安裝的 PHP 擴充功能取決於此水龍頭的可用性。
為了最大程度地相容於較舊的 PHP 版本,您可能希望繼續使用 Valet 2 或 3。
假設您已經安裝了php
公式,則安裝了 PHP 的最新穩定版本。在撰寫本文時,這是 PHP 8.3。
您可以透過 PHP Monitor 的PHP Version Manager安裝其他支援的 PHP 版本。 (您也可以手動安裝或升級 PHP 版本,但不建議這樣做。)
請記住,安裝或更新 PHP 版本,即使透過 PHP Monitor 的PHP 版本管理器完成,也可能會導致其他所需的公式依賴項(保持這些 PHP 版本正常運行所需的軟體)升級。發生這種情況時可能不是很透明,但這可能是安裝 PHP 版本花費的時間比預期時間長的原因:通常還會安裝其他依賴項。
此外,如果某一特定版本的 PHP 相依性也適用於 PHP 的其他(較新)版本,則升級該特定版本的 PHP 也可能會導致其他已安裝的 PHP 版本也被一次更新。透過 Homebrew 管理 PHP 版本有點棘手,甚至 PHP Monitor 也可能遇到一些困難。
如果您遇到奇怪的情況或故障,請在問題追蹤器上開啟問題並聯絡我們。我想繼續改進這個過程,使其盡可能萬無一失。
注意:管理 PHP 版本時使用 PHP Monitor 可能會導致臨時別名衝突,而核心 Tap 別名和 Tap 別名引用不同版本的 PHP,但這通常會帶來一些不便,因為這通常僅適用於新的 PHP 版本發布。
如果您使用的是 macOS Ventura 或更高版本,您可以在「設定」選單中選擇一個選項:「登入時啟動 PHP 監視器」。
如果您使用的是較舊版本的 macOS,則可以透過將PHP Monitor.app拖曳到您帳戶的「系統偏好設定」>「使用者和群組」中的「登入項目」部分來執行此操作。
超方便!
服務管理器已停用,所有其他明顯的 Laravel Valet 整合(配置查找器、網域列表、修復我的 Valet)也被停用。
(大多數其他功能仍然可用。)
如果您想首次使用 PHP Monitor 設定計算機,請依照下列步驟操作。
我還創建了一個影片教程,可能更容易理解。如果您只需要終端命令,請繼續閱讀。
首先安裝自製程式。首先按照那裡的說明進行操作!
然後,您需要設定您的路徑。
nano .zshrc
確保以下行不在註解中:
# on an Intel Mac
export PATH=$HOME/bin:/usr/local/bin:$PATH
如果您使用的是基於 Apple Silicon 的 Mac,則需要新增:
# on an M1 Mac
export PATH=$HOME/bin:/opt/homebrew/bin:$PATH
並將以下內容新增至您的.zshrc
檔案中,但在新增自製程式路徑之前新增此內容:
export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH
如果您要新增composer
和 Homebrew 二進位文件,請透過將它們新增到最後的路徑來確保首選 Homebrew 二進位檔案。在我的系統上,看起來像這樣:
export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH
export PATH=$HOME/bin:/opt/homebrew/bin:$PATH
如果您不在Apple Silicon 上,則應刪除第三行。
安裝php
和composer
公式:
brew install php composer
確保 PHP 連結正確:
which php
應該回傳: /usr/local/bin/php
(或/opt/homebrew/bin/php
如果你在 Apple Silicon 上)
如果你不需要 Laravel Valet,你可以停在這裡。 PHP 監視器在獨立模式下將像這樣運作。
如果您也想擁有 Valet,請繼續使用 Composer 安裝 Valet,如下所示。
composer global require laravel/valet
為了獲得最佳結果,您應該將 PHP 平台的全域相依性鎖定到您打算執行的最舊的 PHP 版本。如果該版本是 PHP 7.0,您的~/.composer/composer.json
檔案可能如下所示(請相應地調整版本!):
{
"require": {
"laravel/valet": "^3.0",
},
"config": {
"platform": {
"php": "7.0"
}
}
}
再次運行composer global update
。這確保了當您切換到不同的全域 PHP 版本時,Valet 不會崩潰。如果是這樣,PHP 監視器會讓您知道對此可以採取哪些措施。
然後,安裝 Valet:
valet install
這應該安裝dnsmasq
並設定 Valet。太好了,快到了!
valet trust
最後,運行 PHP 監視器。由於該應用程式已經過公證並使用開發者 ID 簽名,因此它應該可以運行。您需要批准應用程式的首次啟動,但您現在應該準備好開始。
PHP Monitor 會在您每次啟動應用程式時檢查是否有可用更新。
您可以透過前往首選項(透過功能表列中的 PHP 監視器圖示)並取消勾選「自動檢查更新」來停用此行為。 (您始終可以手動檢查更新。)
最簡單的方法是使用內建的PHP 版本管理器,它允許您一鍵升級 PHP 版本。
如果您想手動執行此操作,可以按照以下說明進行操作。
這裡很容易犯錯誤,最終得到未連結的 PHP 版本或 PHP 監視器中缺少版本。
這是我通常會做的事情:
brew update-reset
brew upgrade
如果此後 PHP 監視器中缺少任何 PHP 版本,請針對缺少的版本執行以下命令:
brew uninstall php@xx
(其中xx
是版本)brew cleanup
(如果您遇到任何權限問題,您可能需要手動清理資料夾)brew install php@xx
(其中xx
是版本)升級後您可能仍需要執行brew link php
。
就是這樣。現在再次啟動 PHP Monitor,您應該就成功了!
嘗試使用brew install php
再次安裝。
這應該可以解決問題!如果這不能解決問題,請執行brew link php --force
。 (之後,您可能需要重新啟動終端以確保檢測到新的連結版本。)
brew install php
brew link php --force
如果您正在訪問.test
域,並且在切換到不同的 PHP 版本後收到 502(錯誤網關),那麼您正在處理一個常見問題。
此問題通常可以透過升級 Valet 並再次運行valet install
來解決。
composer global update
valet install
如果您在大約 30 秒左右看到 502(網關錯誤)錯誤,則您的請求可能會逾時。您可能需要使用自己的程式碼解決效能問題。
如果設定在確定版本號碼時導致警告或錯誤,PHP 監視器會告訴您 PHP 安裝已損壞。
由於 PHP Monitor 透過 Homebrew 更改連結版本,Valet和您的終端 (CLI) 都應使用新的 PHP 版本。
但是,您的系統可能並非如此。如果不是這種情況,您可能連結了特定版本的 PHP。在這種情況下,您可能需要變更設定 PATH 的.bashrc
或.zshrc
檔案(取決於您使用的終端)。
您可以透過執行which php
來了解正在使用哪個版本的PHP。
您可以透過執行命令來找出到底是什麼導致了問題。在 Intel 上,您可以運行(將7.4
替換為損壞的版本):
/usr/local/opt/[email protected]/bin/php -r "print phpversion();"
在 Apple Silicon 上,您可以運行(將7.4
替換為損壞的版本):
/opt/homebrew/opt/[email protected]/bin/php -r "print phpversion();"
您應該在輸出中看到錯誤或警告。
通常這是導致問題的重複擴展聲明,或無法載入的擴充。您必須自行解決該問題(通常透過刪除有問題的擴充功能或重新安裝)。
確保您至少安裝了Valet 3.0 ,因為此版本的 Valet 中新增了對隔離的支援。 (請注意,此版本的 Valet 不再支援 PHP 5.6。)
您在.ini
檔案中提供的值無效。如果是這種情況,PHP 將嘗試將您的值解析為字節,這通常是無意的。 ( 1GB
將解析為僅僅幾個字節,並且您的所有應用程式都將耗盡內存!)
您必須提供以下值: 1024K
、 256M
、 1G
。或者,也允許-1
,或只是一個整數(這將導致 N 位元組數量成為限制)。
範例:例如,嘗試使用1GB
作為記憶體限制將導致此感嘆號。設定 1GB 限制的正確方法是使用1G
作為值。 (注意:為了清楚起見,顯示的值將附加B
,因此如果設定1G
,PHP Monitor 報告的值將為 1 GB。)
(如果您使用 Valet,您可以在.conf.d/php-memory-limits.ini
檔案中調整這些限制。否則,您可能需要調整php.ini
。)
該應用程式在相關.ini
檔案中搜尋特定模式。對於常規擴展:
extension="*.so"
; extension="*.so"
對於 Zend 擴充功能:
zend_extension="*.so"
; zend_extension="*.so"
*
是通配符和副檔名。如果您已註解掉該擴展,請確保已使用分號 (;) 和分號後的一個空格進行註釋,以便 PHP Monitor 偵測到它。
自 v3.4 起,所有載入的 .ini 檔案都會被用來決定要啟用哪些擴充功能。
如果您在 Intel 電腦或啟用了 Rosetta 的 Apple Silicon 電腦上使用 PHP Monitor,則 PHP Monitor 需要/usr/local/bin/brew
中的主 Homebrew 二進位。
如果您在沒有 Rosetta 的 Apple Silicon 上使用 PHP Monitor,則 PHP Monitor 需要/opt/homebrew/bin/brew
中的主 Homebrew 二進位。
如果此處出現問題,您將在啟動時收到警報。
確保您正常運作的Homebrew版本與PHP Monitor所期望的版本相同。例如,如果您使用的是 M1 硬件,但仍使用 Rosetta for Homebrew,則還需要在 Rosetta 下運行 PHP Monitor。
PHP Monitor 是一款通用應用程序,支援兩種架構,因此請在此處了解如何使用 PHP Monitor 啟用 Rosetta。
該應用程式將自動檢查更新,這是最有可能的罪魁禍首。
這會在啟動時發生(除非停用),並且應用程式會直接檢查 GitHub 上託管的 Caskfile。這些數據不會也不會用於分析(而且據我所知,不能)。
當 PHP Monitor 使用二進位檔案時,我也無法阻止brew
透過網路執行操作。
該應用程式包含一個互聯網存取策略文件,因此如果您使用的是 Little Snitch 之類的東西,那麼應該有一個描述為什麼會發生這些呼叫。
您必須在 JSON 檔案中設定這些預設,該檔案位於~/.config/phpmon/config.json
。
您必須至少設定一個有效的預設,此預設才能在 PHP Monitor 中運作。
以下是工作預設的範例:
{ 「掃描應用程式」:[], 「服務」:[], 「預設」:[ { "name": "遺留項目", “php”:“8.0”, 「擴展」:{ “xdebug”:假 }, “配置”: { “記憶體限制”:“128M”, "upload_max_filesize": "128M", “post_max_size”:“128M” } } ], 「出口」: {} }
如果您不希望預設切換到給定的 PHP 版本,則可以省略預設中的php
鍵。
警告您必須重新啟動 PHP 監視器才能偵測到這些變更。
如果您在獨立模式下使用 Valet,則不會顯示資訊Homebrew 服務。
您必須在 JSON 檔案中設定這些服務,該檔案位於~/.config/phpmon/config.json
。
您可以在設定檔中為以您自己的使用者(而不是 root)執行的 Homebrew 服務指定自訂服務。
資訊如果您的服務必須以 root 身分執行,則目前無法將其新增至 PHP 監視器。
您可以透過執行brew services list
來找出哪些服務可用。
以下是我們將mailhog
和mysql
服務加入到 PHP Monitor 的範例:
{ 「掃描應用程式」:[], “服務”:[“mailhog”,“mysql”], 「預設」:[], 「出口」: {} }
警告您必須重新啟動 PHP 監視器才能偵測到這些變更。
您必須在 JSON 檔案中配置這些自訂環境變量,該檔案位於~/.config/phpmon/config.json
。
PHP Monitor 使用預設的 Shell 環境,沒有自訂環境變數。您需要手動設定自訂環境變數。然後將它們用於 Composer 等。
這是一個受尊重的工作COMPOSER_HOME
環境變數的範例:
{ 「掃描應用程式」:[], 「服務」:[], 「預設」:[], 「出口」: { "COMPOSER_HOME": "/絕對/路徑/到/composer/資料夾" } }
警告您必須重新啟動 PHP 監視器才能偵測到這些變更。
當您選擇並右鍵單擊某個網域時,您可以使用各種應用程式開啟這些目錄。這可以幫助加快您的工作流程。然而,為了讓這些應用程式出現,必須先偵測到它們。
支援的應用程式有: PhpStorm、Visual Studio Code、Sublime Text、Sublime Merge、iTerm 。
所有這些應用程式都應該被正確地偵測到,無論它們在系統上的位置如何。如果您可以使用open -a "appname"
開啟它,則應該偵測到該應用程式並執行。如果您已重新命名該應用程序,則檢測該應用程式時可能會出現問題。
若要查看檢查哪些文件以確定可用性,請參閱此文件。
您可以透過建立和編輯~/.config/phpmon/config.json
檔案來新增自己的應用程序,並確保設定了scan_apps
鍵:
{ “scan_apps”:[“Xcode”,“Kraken”] }
您可以在scan_apps
數組中放置任意數量的應用程序,PHP Monitor 將檢查這些應用程式是否存在。您不需要設定完整路徑,只需應用程式的名稱即可。不過,並非所有應用程式都支援開啟資料夾,因此您的成功可能會有所不同。
警告您必須重新啟動 PHP 監視器才能偵測到這些變更。
PHP Monitor 預設支援第三方應用程式集成,並且此功能在「首選項」中啟用,除非您停用它。
您可以獲得官方的 Alfred 工作流程或 Raycast 擴充功能。
如果您想自己整合一些東西,您需要做的就是使用phpmon://
協定並確保在首選項(在 PHP 監視器中)中啟用第三方應用程式整合。
使用應用程式回調,macOS 和 PHP Monitor 允許呼叫以下內容:
掃描並解釋資料夾根目錄中的composer.json
檔案(如果存在)。
如果版本在platform
中設置,則版本優先。如果版本未在platform
中設置,但在require
中(最常見),則使用該版本。
如果目前啟用的 PHP 版本與運行網站所需的版本相容,您將在版本號旁邊看到一個複選標記。
這是透過評估 PHP 需求約束來確定的(例如^8.0
、 ~8.0
或特定版本: 8.0
)。
PHP Monitor 目前會檢查您的composer.json
檔案以嘗試找出您正在執行的專案。
當您連結了許多網站時,這種方法比請求驅動程式快得多,但可靠性稍差,因為透過composer.json
推斷的框架或專案類型可能不是100%準確。
如果有必要,您仍然可以使用命令列詢問 Valet。根據我的經驗,取得驅動程式會不必要地減慢應用程式的速度。
現在您可以使用「急救與服務」>「恢復 Homebrew 權限」來(暫時)解決此問題,並實現乾淨無痛的brew upgrade
或brew cleanup
過程。
如果您想了解更多信息,請參閱此問題以獲取有關為什麼需要這樣做的更多信息。
請聯繫並提出問題。 PHP 監視器不應崩潰...(除非您在應用程式運行時實際刪除 PHP,否則這被認為是正常行為!)
如果您想報告崩潰,請附上相關的日誌文件,以便我可以找出到底出了什麼問題。
若要尋找日誌,請查看~/Library/Logs/DiagnosticReports
(在 Finder 中),看看是否有任何以「PHP Monitor」開頭的(日誌)檔案。
此外,您可以透過向我發送您最新 PHP 監視器會話的詳細日誌來幫助我了解更多資訊。預設情況下禁用日誌記錄。
您可以透過執行touch ~/.config/phpmon/verbose
並重新啟動 PHP Monitor 來啟動額外的詳細日誌記錄。您可以在以下位置找到最新的日誌: ~/.config/phpmon/last_session.log
。請將其附加到相關錯誤報告中。
我沒有包含任何追蹤或分析軟體,因此如果您遇到問題,請透過問題告訴我。
PHP Monitor 完全免費,但如果您負擔得起,捐款有助於保持專案的活力和應用程式的維護。
您可以在此存儲庫的頂部找到贊助商鏈接,或者您可以單擊此處的鏈接進入我的贊助頁面。
捐款確實有助於支付 Apple 開發者計畫的成本,並讓我有動力在工作時間之外繼續從事 PHP Monitor 工作(我確實有一份日常工作!)。
特別感謝:
非常感謝您的貢獻、善意的話語和支持。
這個應用程式會定期在背景執行php-config --version
,通常是在您的 Homebrew 設定發生修改時。檔案系統觀察器用於確定 Homebrew 的bin
目錄中是否有任何變更。
PHP 監視器也會檢查您的.ini
檔案的副檔名並載入有關您的限制(記憶體限制、POST 限制、上傳限制)的更多資訊。另請參閱下面有關配置更改檢測的部分。
該實用程式將檢測您透過 Homebrew 安裝的 PHP 版本,然後允許您在它們之間進行切換。
切換器將停用所有不屬於您想要使用的版本的 PHP-FPM 服務,並連結所需的 PHP 版本。然後,它將重新啟動您所需的 PHP 版本的 FPM 進程。這一切都是並行發生的,所以這應該比 Valet 的切換器快一點。
如果您使用的是 Valet 3 或更高版本,保持隔離網站正常運作所需的 PHP-FPM 版本也會根據需要啟動或停止。
PHP 監視器在相關的conf.d
目錄中監視檔案系統中目前連結的 PHP 版本。
每當修改 .ini 檔案時,PHP 監視器都會嘗試重新載入有關活動 PHP 安裝的當前資訊。
如果擴充功能或其他進程在短時間內(< 1 秒)內多次寫入單一文件,PHP 監視器只會在一段時間後重新載入活動設定資訊(略有延遲)。
Certificates
目錄下是否存在該網站名稱的符合證書來確定目錄是否受保護。composer.json
檔案中的「顯著依賴項」。如果您的require
中有laravel/framework
,那麼專案類型很有可能是Laravel
。注意如果您連結了文件、桌面或下載中的資料夾,您可能需要授予 PHP Monitor 對這些目錄的存取權限,PHP Monitor 才能正常運作。
如果您想了解更多有關其工作原理的信息,我建議您查看原始程式碼。
我已盡最大努力盡可能多地進行註釋,並避免使用過於複雜的架構,以使程式碼盡可能易於維護。從長遠來看,程式碼並不完美(仍然可以進行大量清理!),但應用程式運作良好。
我還對我發現需要測試的應用程式的關鍵部分進行了一些測試。將來,我想為一些 UI 內容添加更多測試,但目前測試更多的是單元測試而不是功能測試。
有關開發人員的更多詳細信息,請參閱開發人員文件文件。