“PHP-Feature-Flag”非Packagist官方包,composer require会失败;应通过composer search feature flag查找可用方案(如launchdarkly/ld-php-server-sdk),或为私有库配置VCS仓库、autoload映射并指定分支。

PHP-Feature-Flag 不是 Composer 官方包,也未发布在 Packagist 上——直接 composer require php-feature-flag 会失败。你得自己处理源码引入或换用真正可安装的替代方案。
确认你用的是哪个“PHP-Feature-Flag”
GitHub 上有多个同名/近名项目,比如:
• thecodingmachine/php-feature-flags(已归档,不维护)
• launchdarkly/ld-php-server-sdk(商业 SDK,支持 flag、targeting、灰度)
• 自研轻量库(常见于内部 Git 仓库)
执行 composer search feature flag 查看可用包,或直接访问 Packagist 搜索关键词。别凭印象写包名,拼错就报 Could not find package。
若使用 LaunchDarkly SDK(推荐用于生产灰度)
它支持用户分群、百分比放量、环境隔离,且有 PHP 官方维护:
立即学习“PHP免费学习笔记(深入)”;
- 运行
composer require launchdarkly/ld-php-server-sdk - 初始化时必须传入 SDK key(不是 client-side ID),否则
LDClient::__construct()抛InvalidArgumentException - flag 计算默认同步调用,高并发下建议搭配
LaunchDarklyImplIntegrationsRedis做缓存,否则每次请求都打 LD 服务 - 灰度逻辑靠
variation('my-flag-key', $user, false)的$user参数驱动:需含key(必填)、custom(如['region' => 'cn', 'version' => '2.1'])
若坚持用私有 Git 仓库的 feature-flag 库
Composer 默认不拉取非 Packagist 包,必须显式声明源:
{
"repositories": [
{
"type": "vcs",
"url": "https://your-git-server.com/team/php-feature-flag.git"
}
],
"require": {
"your-vendor/php-feature-flag": "dev-main"
}
}
注意三点:
-
url必须能被 Composer 机器 git clone(SSH 或 HTTPS + 凭据) - 分支名写
dev-main还是dev-master取决于远程默认分支,写错会报Could not find a matching version - 私有库没 autoload 配置?得手动加
"autoload": {"psr-4": {"FeatureFlag\": "src/"}}并运行composer dump-autoload
本地开发时 flag 总是 false?检查这三处
灰度开关不生效,90% 是配置或上下文问题:
- SDK 初始化后是否调用了
$client->flush()或等待了start()的异步加载完成?未就绪时variation()默认返回 fallback 值(常为false) -
$user的key是空字符串、null或重复值?LD 后台按 key 哈希分流,无效 key 导致永远进 baseline 分支 - 当前环境(
environment)和 flag 的 targeting 规则不匹配——比如 flag 只对production环境开启,但你的LD_ENVIRONMENT设成了staging
真要快速验证,临时把 flag 设置成 “Target individual users”,填上你自己的 user key,再刷新看是否生效。绕过复杂规则,先确认链路通不通。



















