xampp默认未启用ldap扩展,需同时配置php的cli与apache模式下的php.ini启用php_ldap.dll和php_openssl.dll,并将libsasl.dll等依赖dll复制到apache/bin目录,再以管理员身份重启apache,phpinfo()显示“ldap support => enabled”方为生效。

XAMPP 默认不启用 LDAP 扩展,直接 composer require adldap2/adldap2 会报 ext-ldap * -> system missing 错误——这不是 Composer 的问题,而是 PHP 根本没加载 LDAP 支持。
确认当前 PHP 是否真启用了 ldap 扩展
别只看 php.ini 里有没有取消 extension=php_ldap.dll 的注释。Windows 下 XAMPP 的 CLI(命令行)和 Apache 模块用的可能是两套 php.ini 文件:
- 运行
php --ini查 CLI 加载的配置路径 - 在 Apache 中访问
phpinfo()页面,搜索 “Loaded Configuration File” 看 Web 模式用的是哪个php.ini - 两个地方都得改,否则
composer update成功了,Web 请求里ldap_connect()还是会报Call to undefined function ldap_connect()
启用 ldap 扩展必须复制依赖 DLL 到 apache/bin
XAMPP 的 PHP 能加载 php_ldap.dll,但运行时会动态链接 libsasl.dll。这个文件虽然在 xampp/php/ 目录下存在,但 Apache 启动时默认只在 apache/bin 和系统 PATH 中找 DLL —— 它根本不会去 php/ 目录下搜。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、ThinkPHP 等主流 PHP 应用。XAMPP 8.0.30 在保持兼容性的同时,优化了 PHP 8.0 的性能与
- 把
xampp/php/libsasl.dll复制到xampp/apache/bin/目录下 - 同时确认
xampp/php/libeay32.dll和xampp/php/ssleay32.dll也在apache/bin下(较新 XAMPP 版本可能已自带,老版本如 1.8.x 必须手动补) - 重启 Apache,再刷
phpinfo(),看到 “LDAP Support => enabled” 才算真正生效
连接域控服务器必须开 openssl 扩展 + 正确设置协议
AD 域控通常要求 LDAPS(端口 636)或 STARTTLS(端口 389),两者都依赖 OpenSSL。光有 LDAP 扩展还不够:
- 编辑同一个
php.ini(CLI 和 Apache 两个都要),取消extension=php_openssl.dll的注释 - LDAPS 连接写法:用
ldap_connect("ldaps://dc.example.com:636"),不能漏掉s;若证书非受信 CA 签发,需在连接前加ldap_set_option(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER) - STARTTLS 连接写法:先
ldap_connect("ldap://dc.example.com:389"),再立即调用ldap_start_tls($conn),成功后才能ldap_bind() - adldap2 v6+ 默认尝试 STARTTLS,若域控禁用该功能,会静默失败——建议显式指定
'use_ssl' => true或'use_tls' => false避免猜测
adldap2 初始化失败常见卡点
即使扩展全开、连接字符串正确,Adldap\Adldap 构造仍可能抛异常,原因往往不在 LDAP 本身:
-
ldap_bind()失败最常见于用户名格式:AD 要求完整 DN(如CN=admin,CN=Users,DC=example,DC=com)或 UPN(如admin@example.com),不能只填admin - 密码含特殊字符(如
@、$)未 urlencode 会导致绑定被截断,建议用变量传入而非硬编码字符串 - 防火墙或域控策略限制了来自本地开发机的 LDAP 请求,可先用命令行工具验证:
ldapsearch -x -H ldaps://dc.example.com -D "admin@example.com" -W -b "DC=example,DC=com" "(sAMAccountName=testuser)" - PHP 进程权限不足(尤其 Windows 服务模式下)可能导致 SSL 握手失败,此时错误信息常为
Unable to start TLS而非具体证书错误
最容易被忽略的是:XAMPP 启动 Apache 时若弹出 UAC 提权提示,而你点了“否”,Apache 就会以受限权限运行——这时候连 libsasl.dll 都可能加载失败,更别说建立安全连接。务必以管理员身份运行 XAMPP 控制面板。










