phpEnv不支持ClickHouse扩展,因其仅提供预编译DLL且官方无Windows版clickhouse.so或php_clickhouse.dll;推荐用smi2/phpclickhouse Composer包通过HTTP接口(8123端口)连接。

phpEnv 是 Windows 下的 PHP 多版本环境管理工具,本身不提供原生 ClickHouse 扩展(如 clickhouse.so 或 php_clickhouse.dll),也不支持通过 pecl install 直接编译安装 —— 因为它的扩展机制依赖预编译 DLL,而官方至今未发布 Windows 兼容的 ClickHouse 官方 PHP 扩展。
所以,不能在 phpEnv 中启用 clickhouse 扩展模块。但你仍能连接 ClickHouse,只是必须走 HTTP 接口 + Composer 第三方客户端。
为什么 phpEnv 里找不到 clickhouse.so 或 php_clickhouse.dll?
官方 clickhouse PECL 扩展(pecl install clickhouse)仅支持 Linux/macOS 编译,Windows 下无维护、无预编译包;phpEnv 的 ext 目录只接受 DLL,且要求与当前 PHP 版本(TS/NTS、VC 版本、架构)严格匹配。尝试强行放入任意 DLL 几乎必然导致 PHP Startup: Unable to load dynamic library 或 Apache 崩溃。
用 smi2/phpclickhouse 替代扩展(推荐方案)
这是目前 Windows + phpEnv 下最稳定、最常用的方式:纯 PHP 实现,基于 cURL 走 ClickHouse 的 HTTP 接口(默认端口 8123),无需 DLL。
立即学习“PHP免费学习笔记(深入)”;
操作步骤:
- 确保 phpEnv 中当前激活的 PHP 版本已开启
curl和json扩展(默认通常已开) - 打开终端,cd 到你的项目根目录,执行:
composer require smi2/phpclickhouse
- 代码中按如下方式使用:
require 'vendor/autoload.php';<br>use ClickHouseDB\Client;<br>$db = new Client([<br> 'host' => '127.0.0.1',<br> 'port' => '8123',<br> 'username' => 'default',<br> 'password' => '',<br> 'database' => 'default'<br>]);<br>if ($db->ping()) {<br> echo "HTTP 连接成功";<br>} - 注意:
smi2/phpclickhouse默认走 HTTP,不是 TCP(9000端口),所以 ClickHouse 服务必须启用http_port(配置文件config.xml中确认<http_port>8123</http_port>未被注释)
常见报错与绕过方法
“cURL error 7: Failed to connect”:检查 ClickHouse 是否运行、防火墙是否放行 8123、host 是否写成 localhost(某些 Windows 环境下 DNS 解析慢或失败,改用 127.0.0.1 更可靠)
“Authentication failed”:phpEnv 下 PHP 进程以当前 Windows 用户身份运行,不会自动读取 ClickHouse 的 users.xml 凭据;必须显式传 username 和 password,空密码也不能省略 'password' => ''
插入中文乱码或 JSON 字段解析失败:ClickHouse HTTP 接口默认用 UTF-8,但 smi2/phpclickhouse 在 insert() 时若字段含特殊字符(如换行、引号),需手动 json_encode($row, JSON_UNESCAPED_UNICODE) 预处理;或改用 writeFile() 写入 TSV/CSV 格式更稳妥
不要尝试的路径
别下载网上流传的第三方 php_clickhouse.dll —— 多数是旧版、ABI 不兼容、甚至带后门;也别试图用 WSL 编译再拷 DLL 过来,架构和线程模型不匹配,大概率 crash。
真正需要 TCP 协议级高性能(比如高并发低延迟写入),phpEnv 就不是合适环境;应换 Docker + Linux 容器,或直接切到 Nginx + PHP-FPM + Ubuntu 生产栈。











