注意如果这个软件对您有用,我请您给存储库加注星标,这样我就知道该软件正在被使用。另外,请考虑赞助支持该项目,因为这是我在空闲时间制作的东西。谢谢你!
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。有关更多信息,请参阅 SECURITY.md 以了解不同版本的 Valet 支持哪些版本的 PHP。
假设您已经安装了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 Monitor。
您可以通过运行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 内容添加更多测试,但目前测试更多的是单元测试而不是功能测试。
有关开发人员的更多详细信息,请参阅开发人员文档文件。