phpEnv 下安装 Solr 扩展必须使用与 PHP 版本、TS/NTS、架构、VC 编译器完全匹配的预编译 php_solr.dll,通过 phpinfo() 确认参数后从 windows.php.net/pecl 下载对应 ZIP 包,配置 php.ini 并确保依赖(如 php_ssh2.dll)正确加载。

phpEnv 是 Windows 下轻量级 PHP 环境管理工具(类似 XAMPP 但更精简),它不自带 solr 扩展,也不能用 pecl install 直接安装——因为 phpEnv 默认不附带 phpize、编译工具链或 pkg-config,所有扩展必须手动配对 DLL 文件。
结论很直接:phpEnv 只能通过预编译的 php_solr.dll 加载 Solr 扩展,且必须严格匹配 PHP 版本、线程模型(TS/NTS)、架构(x86/x64)和 VC 编译器版本。
怎么确认 phpEnv 的 PHP 具体版本和 ABI 参数
phpEnv 启动后,打开浏览器访问 <a href="https://www.php.cn/link/8ae8e407864cd3b5e1298bdf1e6787f5">https://www.php.cn/link/8ae8e407864cd3b5e1298bdf1e6787f5</a>(或在站点根目录新建一个 phpinfo.php,内容为 <?php phpinfo(); ?>),重点看这几项:
-
PHP Version:比如7.4.33 -
Thread Safety:显示enabled→ 是 TS;disabled→ 是 NTS -
Architecture:x64或x86 -
Compiler:通常是MSVC15(对应 VS2017)、MSVC16(VS2019)或MSVC17(VS2022)
常见错误现象:
立即学习“PHP免费学习笔记(深入)”;
- 加载
extension=php_solr.dll后 Apache/Nginx 启动失败,或php -v报错The specified procedure could not be found -
phpinfo()里完全不显示solr模块,也无任何警告
这基本是 ABI 不匹配:比如你用的是 PHP 8.1 NTS x64 MSVC17,却下了 php_solr-4.2.0-7.4-ts-vc15-x64.dll。
从哪下载正确的 php_solr.dll
官方唯一可信来源是:<a href="https://www.php.cn/link/b30be338efa14f74a40949dbafd02b57">https://www.php.cn/link/b30be338efa14f74a40949dbafd02b57</a>
- 进入该页面后,按最新稳定版往下翻(截至 2026 年 4 月,最新是
solr-4.3.0) - 找到与你
phpinfo()完全一致的 ZIP 包,例如:-
php_solr-4.3.0-8.1-nts-vc17-x64.zip(PHP 8.1 NTS x64,VS2022 编译)
-
- 解压后取其中的
php_solr.dll和php_solr.pdb(后者非必需,但调试时有用)
不要用第三方打包站、GitHub 镜像或“已编译好”的网盘链接——那些往往 ABI 错位或含后门。
注意:
-
solr-4.x要求 PHP ≥ 7.2;solr-3.x最高只支持 PHP 7.1 - 若你用的是
phpEnv自带的 PHP 5.6(老项目),只能选solr-2.4.0或2.5.0,且必须匹配VC11(VS2012)
怎么配置 php.ini 让 solr.so / php_solr.dll 生效
phpEnv 的 php.ini 通常位于:%PHPEVN_HOME%\php\php.ini(例如 C:\phpEnv\php\php.ini)
你要做三件事:
- 确认
extension_dir指向正确的扩展目录(默认就是ext,不用改) - 在
; extension=mbstring这类行附近,新增一行:extension=php_solr.dll - 如果你同时用了
igbinary或ssh2(Solr 依赖 libssh2),必须先加载它们:extension=php_ssh2.dllextension=php_solr.dll
重启 phpEnv 控制面板里的 Web Server(Apache 或 Nginx),再刷 phpinfo() ——出现 solr 模块标题,才算成功。
常见坑:
- 忘了复制
libssh2.dll到Windows\System32(TS 版本必须)或php\目录(NTS 版本建议放这里) -
php.ini改了但没重启服务,或者改错了文件(phpEnv可能有多个php.ini,以php --ini输出为准) - 用了
extension=solr.so(Linux 写法)——Windows 下必须是.dll
SolrClient 初始化失败的典型原因
即使扩展加载成功,new SolrClient($options) 仍可能报错:
Fatal error: Uncaught Error: Class 'SolrClient' not found
→ 扩展根本没加载,回上一步检查phpinfo()Warning: SolrClient::doPost(): curl error (7): Failed to connect to 127.0.0.1 port 8983
→ Solr 服务没起来,或端口/路径不对。确认你启动的是 Solr 9.x(bin\solr start),且 core 名称(如gettingstarted)和$options['path']一致Notice: SolrClient::__construct(): invalid option 'wt'
→wt=json是旧版 Solr(≤8.x)参数,Solr 9 默认只接受wt=phpserialize或走json.nl=flat+fl=*显式字段控制
SolrClient 构造时的 $options 至少要包含:
-
'hostname' => '127.0.0.1' -
'port' => 8983(不能省,默认不是 80) -
'path' => '/solr/your_core_name'(结尾不加斜杠)
别依赖默认值,全部显式写出来,排查起来快得多。
真正麻烦的从来不是“装上”,而是“装对”——ABI 匹配差一位,整个扩展就静默失效;Solr 版本跨大版本,SolrQuery 的方法行为也会变。动手前花两分钟看准 phpinfo(),比重装三遍环境都管用。



















