phpEnv 无法集成或安装 Permify,因二者技术栈不同:phpEnv 是 PHP 本地开发环境工具,Permify 是独立的 Go 编写的授权服务,需单独运行并通过 HTTP 调用。

phpEnv 本身不提供 Permify 的集成支持,也不能直接“安装 Permify”——它只是一个 Windows 下的 PHP + Web 服务器(Apache/Nginx)+ MySQL/Redis 等本地开发环境工具,而 Permify 是一个独立的、用 Go 编写的授权服务,需以二进制或 Docker 方式运行,与 PHP 运行时无依赖关系。
Permify 不能作为 phpEnv 的“组件”安装
你无法在 phpEnv 界面里点一下就装上 Permify,原因很直接:
- Permify 不是 PHP 扩展,也不是 Composer 包,
composer require permify/permify会失败 - phpEnv 启动的是 PHP-FPM + Apache/Nginx 进程,而 Permify 是一个监听
3476端口的 Go 服务,两者进程模型、语言栈、启动方式完全不同 - phpEnv 的“软件商店”里没有 Permify,其生态聚焦于 PHP 开发辅助(如探针、phpinfo、Composer 命令封装),不覆盖外部微服务
想在 phpEnv 环境中对接 Permify,得单独运行 Permify 服务
典型做法是:让 phpEnv 负责你的 PHP 应用(比如 Laravel 后台),同时在本机另起一个 Permify 实例,PHP 应用通过 HTTP 请求(http://localhost:3476)调用它。操作要点如下:
- 从 GitHub Releases 下载对应 Windows 的
permify_*.zip(如permify_0.12.0_windows_amd64.zip) - 解压后双击
permify.exe或命令行运行:permify.exe serve --database-engine=memory(开发用内存 DB 最简) - 确认服务已启动:
curl http://localhost:3476/health应返回{"status":"ok"} - 在你的 PHP 代码里用 Guzzle 或
file_get_contents()请求http://localhost:3476/v1/tenants等接口,注意处理跨域或连接超时 - 别把 Permify 和 phpEnv 的端口冲突——phpEnv 默认占
80/443/3306,Permify 默认用3476,一般不撞,但若改过需检查
常见报错:PHP 调用 Permify 时 connection refused
这不是 phpEnv 配置问题,而是 Permify 根本没起来,或防火墙/杀软拦截了本地端口。排查顺序:
立即学习“PHP免费学习笔记(深入)”;
- 任务管理器里看有没有
permify.exe进程;没有就说明没运行 - cmd 执行
netstat -ano | findstr :3476,没输出 = 服务未监听 - phpEnv 的“TCP端口监控”功能只扫它自己启用的服务(Apache/Nginx/MySQL),对 Permify 无感知,别指望它显示
- 如果用
--database-engine=postgres,确保 PostgreSQL 已启动且database-uri地址可连(phpEnv 自带的 PostgreSQL?不,它默认只带 MySQL) - Windows Defender 防火墙可能静默阻止新 exe 监听,首次运行时留意弹窗,或临时关闭测试
真正容易被忽略的是:Permify 的配置和数据模型(schema、tenant、relationship)完全独立于 phpEnv,PHP 应用只是它的客户端。你得自己维护 Permify 的 schema 文件、用 permify write-schema 推送,而不是指望 phpEnv 提供图形化界面来管理这些——它不负责这部分。



















