You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用sqlsrv_connect()报错未定义,但phpinfo显示驱动已加载

解决Web环境下sqlsrv_connect()未定义的问题(CLI环境驱动已加载)

你遇到的核心问题是CLI版本的PHP镜像和Apache Web服务使用两套独立的PHP配置环境——虽然CLI下php -m和phpinfo()能看到sqlsrv驱动,但Web环境的PHP根本没加载这些扩展。

以下是具体的排查和解决步骤:

  • 先确认Web环境的PHP配置路径
    在你的login.php里临时添加<?php phpinfo(); exit; ?>,访问页面后查看两个关键字段:

    • Loaded Configuration File:Web环境使用的主php.ini路径
    • Additional .ini files parsed:Web环境加载的额外配置文件目录
      你会发现,Web环境的配置目录和CLI的/etc/php83/conf.d/不是同一个(通常是/etc/php83/apache2/conf.d/这类路径)。
  • 复制sqlsrv扩展配置到Web环境目录
    把CLI下的sqlsrv相关配置文件复制到Web环境的配置目录,比如:

    cp /etc/php83/conf.d/docker-php-ext-sqlsrv.ini /etc/php83/apache2/conf.d/
    cp /etc/php83/conf.d/docker-php-ext-pdo_sqlsrv.ini /etc/php83/apache2/conf.d/
    

    如果是在Dockerfile里做,直接把这两行加在安装Apache的步骤后面。

  • 检查Dockerfile的Apache配置步骤
    确保你安装了适配Apache的PHP包,而不是只装CLI版本:

    # 安装Apache和对应的PHP模块
    apk add --no-cache php83-apache2
    # 确保PHP命令指向正确版本
    ln -sf /usr/bin/php83 /usr/bin/php
    

    另外,docker-php-ext-enable默认只针对CLI环境,所以必须手动把扩展配置同步到Apache的PHP配置目录。

  • 重启Apache并验证
    修改配置后必须重启Apache才能生效:

    service apache2 restart
    

    再次访问phpinfo()页面,搜索sqlsrv和pdo_sqlsrv,确认这两个扩展已经加载,之后再测试sqlsrv_connect()即可。

内容的提问来源于stack exchange,提问作者Kyra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:43:18