在功能迭代频率不断加快的背景下,直接全量上线新功能往往伴随着不可预知的业务风险。AB测试通过将用户流量按比例分配到不同版本,能够用数据量化的方式评估改动带来的实际收益。GrowthBook不仅提供了可视化的实验管理后台,还提供了多语言的SDK支持,其中PHP SDK可以轻松集成到基于phpEnv搭建的本地开发环境中。本文将完整梳理在phpEnv下安装GrowthBook服务端,并在PHP项目中接入SDK完成一次AB测试的全流程操作。

phpEnv环境下部署GrowthBook的前置准备
phpEnv是一款集成了Nginx、PHP、MySQL等常用组件的Windows端开发环境管理工具,它的优势在于可以灵活切换PHP版本,并且支持自定义站点配置。GrowthBook则是一个开源的特性开关和AB测试平台,官方推荐通过Docker进行部署。由于phpEnv本身并不直接集成Docker环境,我们需要在系统中单独安装Docker Desktop,并确保其正常运行。在启动Docker后,可以通过命令行验证版本信息,确保后续的容器编排能够顺利执行。
在准备阶段,还需要确认系统的端口占用情况。GrowthBook默认会使用3000端口作为Web服务入口,同时内部还会运行PostgreSQL数据库服务。如果本地环境已经存在占用这些端口的应用,需要提前释放或修改GrowthBook的默认端口映射。此外,建议在本地准备一个干净的目录用于存放GrowthBook的配置文件和持久化数据,例如在D盘根目录创建一个growthbook文件夹,方便后续管理。
获取GrowthBook部署文件的方式非常简单,官方在GitHub仓库中提供了标准的docker-compose.yml模板。我们可以直接在准备好的目录中通过git克隆仓库,或者手动下载该文件。为了简化流程,这里建议直接克隆完整的仓库,这样不仅包含了编排文件,还包含了后续可能需要用到的自定义配置示例。克隆完成后,进入目录检查文件结构,确保docker-compose.yml文件存在且可读。
GrowthBook容器编排与初始化配置
在拿到docker-compose.yml文件后,我们需要根据phpEnv的实际情况进行一些微调。默认配置中,GrowthBook会启动两个主要容器:一个是运行PostgreSQL的数据库容器,另一个是运行GrowthBook应用的Web容器。为了确保数据在容器重启后不会丢失,配置文件中已经定义了数据卷挂载。我们可以修改挂载路径,将其指向我们之前创建的专用目录,这样即使执行了容器销毁操作,实验数据和账户信息依然能够保留。
version: '3'
services:
postgres:
image: postgres:14
environment:
POSTGRES_DB: growthbook
POSTGRES_USER: growthbook
POSTGRES_PASSWORD: growthbookpass
volumes:
- ./data/postgres:/var/lib/postgresql/data
ports:
- "5432:5432"
growthbook:
image: growthbook/growthbook:latest
depends_on:
- postgres
environment:
DATABASE_URL: postgres://growthbook:growthbookpass@postgres:5432/growthbook
PORT: 3000
ports:
- "3000:3000"
volumes:
- ./data/growthbook:/usr/src/app/packages/growthbook/.growthbook
完成配置修改后,在当前目录打开命令行窗口,执行容器启动命令。Docker会自动拉取所需的镜像文件,这可能需要几分钟的时间,具体取决于网络状况。当命令行提示所有容器已经启动并且状态为Up时,说明GrowthBook服务已经成功运行。此时可以在浏览器中访问本地的3000端口,如果看到GrowthBook的初始化向导界面,说明容器编排已经顺利完成。
在Web初始化向导中,系统会要求设置管理员账户和密码,并配置一些基础的环境变量。这里需要特别注意API密钥的生成,因为后续PHP SDK在连接GrowthBook时需要用到这个密钥进行身份验证。完成向导后,登录管理后台,在系统设置中找到API Keys选项,记录下Secret Key。同时,我们还需要在后台创建一个项目,并在该项目下定义我们要测试的特性开关,这些配置将直接决定SDK端获取到的实验规则。
PHP项目集成GrowthBook SDK
有了运行中的GrowthBook服务端,接下来就可以在phpEnv管理的PHP项目中接入SDK了。GrowthBook的PHP SDK通过Composer进行分发,我们可以利用phpEnv自带的Composer工具快速完成安装。在项目根目录打开终端,执行require命令引入SDK。安装完成后,Composer会自动生成autoload文件,我们在业务代码中只需要引入这个自动加载文件即可使用SDK提供的各类方法。
composer require growthbook/growthbook
SDK的初始化过程非常直观,核心是创建一个GrowthBook实例,并向其提供API密钥以及API地址。由于GrowthBook的配置数据是通过HTTP接口拉取的,我们需要确保PHP环境开启了curl扩展。在phpEnv的面板中,可以方便地勾选curl扩展并重启PHP服务。初始化代码通常会封装在一个独立的类或函数中,以便在全局范围内复用这个实例。在实例化时,SDK会尝试连接指定的API地址,如果网络不通或密钥错误,会在后续调用中抛出异常或返回默认值。
require_once 'vendor/autoload.php';
use Growthbook\Growthbook;
// 初始化GrowthBook客户端
$growthbook = Growthbook::create()
->withApiHost('http://127.0.0.1:3000')
->withApiKey('你的Secret Key')
->withAttributes([
'user_id' => $_SESSION['user_id'] ?? 'guest_123',
]);
// 拉取特性开关配置
$growthbook->loadFeatures();
在上述代码中,withAttributes方法非常关键,它用于向GrowthBook传递当前用户的唯一标识和其他属性。这些属性将作为流量分配的哈希依据,确保同一个用户在多次请求中始终被分配到同一个实验组。如果用户未登录,可以使用会话ID或浏览器指纹作为临时标识。调用loadFeatures方法后,SDK会从服务端拉取最新的实验配置并缓存在内存中,后续的判断逻辑将直接基于这些缓存数据进行,不会产生额外的网络请求,从而保证了业务接口的响应速度。
实验配置与效果验证
为了验证整个链路是否通畅,我们需要在GrowthBook后台创建一个具体的实验。进入管理后台的Features菜单,点击新建特性开关,命名为button_color_experiment。在配置规则时,选择Experiment类型,设置两个变体:control代表原始的蓝色按钮,test代表新的红色按钮。流量分配比例可以设置为各占百分之五十,并选择使用user_id作为分配依据。保存后,这个特性开关就会通过API下发到我们的PHP应用中。
// 获取当前用户在实验中的分组
$buttonColor = $growthbook->getFeatureValue('button_color_experiment', 'blue');
if ($buttonColor === 'red') {
// 展示红色按钮逻辑
echo '<button style="background-color: red;">立即购买</button>';
} else {
// 展示默认蓝色按钮逻辑
echo '<button style="background-color: blue;">立即购买</button>';
}
// 上报转化事件用于后续数据分析
$growthbook->track('purchase_click', [
'value' => 99.00,
]);
将上述代码集成到实际的业务页面中后,我们可以通过切换不同的user_id来模拟不同用户的访问行为。每次刷新页面时,SDK会根据传入的user_id计算出稳定的分组结果,并返回对应的颜色值。当用户点击按钮时,通过track方法将转化事件上报给GrowthBook服务端。随着数据的积累,我们可以在GrowthBook后台的实验详情页查看到两个分组的转化率对比、置信度等统计指标,从而科学地判断红色按钮是否真的提升了购买转化率。
在实际操作中,可能会遇到一些常见问题。如果发现SDK始终返回默认值,首先需要检查API地址和密钥是否配置正确,其次确认PHP环境是否能够访问3000端口。如果分组结果在不同请求中频繁跳动,通常是因为没有传递稳定的用户标识,导致每次请求都被当作新用户重新分配。通过排查日志和打印SDK内部的调试信息,可以快速定位并解决这些集成问题,让AB测试环境稳定地服务于业务迭代。
phpEnvGrowthBookPHP SDK修改时间:2026-08-22 02:33:15