phpEnv 不支持 CouchDB 安装,因其仅为 PHP+Web服务器+SQL数据库栈管理工具;CouchDB 是独立 Erlang 应用,需单独安装 MSI 包并监听 5984 端口,PHP 通过 HTTP 请求(如 cURL)与其通信。

phpEnv 本身不支持 CouchDB 安装或集成 —— 它只管 PHP、Apache/Nginx、MySQL/PostgreSQL 和 PHP 扩展,CouchDB 是独立的 Erlang 应用,必须单独部署。
为什么不能在 phpEnv 里“安装”CouchDB
phpEnv 的设计目标是快速搭建 PHP Web 运行栈(PHP + Web Server + SQL DB),所有组件都打包为 Windows 可执行二进制并由 phpEnv 启停管理。而 CouchDB:
- 不是 PHP 扩展,没有
ext-couchdb这种东西 - 不通过
php.ini加载,也不依赖pdo_*或mysqli - 是独立进程(Erlang VM),监听
:5984端口,靠 HTTP 通信 - Windows 官方只提供 MSI 安装包(非 portable),无法塞进 phpEnv 的服务管理体系
实际可行的本地开发组合方案
你仍可以用 phpEnv 运行 PHP 代码,同时让 CouchDB 在系统级运行 —— 关键是端口与权限不冲突:
- 确认
5984端口空闲:netstat -ano | findstr :5984,若被占用(常见于 Skype 或旧版 CouchDB),需改 CouchDB 配置或关掉冲突程序 - Windows 下直接下载
apache-couchdb-3.3.3.msi(2026 年最新稳定版)安装,勾选「Add to PATH」便于命令行调用 - 安装时选择「
Single-node setup」,设管理员账号(如admin/secret123),不要跳过这步 - 启动后验证:
curl -I http://admin:secret123@localhost:5984/应返回HTTP/1.1 200 OK - phpEnv 中的 PHP 代码访问地址就是
http://admin:secret123@localhost:5984/,无需额外配置
PHP 代码连 CouchDB 最简验证写法(别用类库先)
绕过所有第三方封装,直用 curl 测试连通性与认证,这是最容易卡住的环节:
$url = 'http://admin:secret123@localhost:5984/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true); // 只要 header,更快
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code === 200) {
echo "✅ CouchDB 在线,版本可查";
} else {
echo "❌ HTTP {$http_code}:检查服务是否运行、凭据是否正确、防火墙是否放行 5984";
}
常见失败原因:
-
7(Failed to connect)→ CouchDB 没启动,或netstat显示没监听127.0.0.1:5984 -
401→ 用户名密码错,或未在安装向导中设置管理员(MSI 安装默认不设,必须手动走一遍/_utils#setup) -
403→ 绑定地址不对,检查etc\local.ini中[chttpd] bind_address = 127.0.0.1是否存在且未被注释
phpEnv 项目里调用 CouchDB 的关键注意点
PHP 脚本和 CouchDB 之间只有 HTTP 这一层,所有问题都落在请求构造上:
- 插入文档必须用
POST /mydb或PUT /mydb/doc_id,且 body 是json_encode($data)后的字符串,不是 PHP 数组 - 必须显式设置两个 header:
Content-Type: application/json和Accept: application/json - 中文字段要用
json_encode($data, JSON_UNESCAPED_UNICODE),否则存进去是\u4f60\u597d - 数据库名、文档 ID 只能含小写字母、数字、下划线、短横线,不能有大写、空格、斜杠 ——
my-database✅,My Database❌ - 首次创建数据库前,确保三个系统库已存在:
_users、_replicator、_global_changes(单节点可删最后一个)
真正容易被忽略的是:CouchDB 的错误响应体里往往带具体提示(比如 "reason":"name not allowed"),但很多 PHP 封装库默认不打印 curl_error() 或响应 body,导致你只看到 400 却不知哪错了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











