【问题标题】:SQLSRV works for CLI only but not from APACHE webserverSQLSRV 仅适用于 CLI,但不适用于 APACHE 网络服务器
【发布时间】:2015-11-09 10:43:36
【问题描述】:

我正在使用 sqlsrv 连接到本地主机上的 MS SQL 数据库,没有任何问题。最近,我在运行 Windows Server 2012 R2 的测试服务器上安装了“sqlsrv”驱动程序,它使用与我的本地主机 (php 5.5.19 - xampp) 相同版本的 PHP。

从测试服务器的 CLI 运行数据库脚本可以正常工作。 例如:“D:\MYXAMPP\php\php.exe D:\MYXAMPP\htdocs\test\test.php”将连接到一个 mssql 数据库,选择一些内容并将其打印到屏幕上而不会出错。

但是,从 Web 界面打开时,相同的脚本会抱怨找不到驱动程序。我尝试检查php错误日志,发现启动错误

"PHP Warning:  PHP Startup: Unable to load dynamic library 'D:\MYXAMPP\php\ext\php_sqlsrv_55_ts.dll' - The specified module could not be found.
PHP Warning:  PHP Startup: Unable to load dynamic library 'D:\MYXAMPP\php\ext\php_pdo_sqlsrv_55_ts.dll' - The specified module could not be found."

我尝试重新启动 apache,但同样的错误不断出现。可能是什么问题?

【问题讨论】:

    标签: php sql-server apache sqlsrv


    【解决方案1】:

    我找到了解决这个问题的方法。原来是服务器环境 Visual C++ Redistributable x86 版本。正如this answer 中指出的,sqlsrv 扩展的架构是x86,因此即使在x64 机器上也需要x86 VC++。

    我在使用随 xampp 分发的批处理脚本启动 apache 时注意到这一点,而不是使用 xampp 控制面板,会出现一个弹出窗口,说明 “Missing MSVCP110.dll”,我发现它是链接的到 VC++ 2012。我从microsoft's website 下载了它,然后重新启动了 apache,没有任何错误。从那时起,SQLSRV 一直适用于 APACHE 和 CLI 接口。

    我仍然不知道为什么首先 CLI php API 加载了扩展,而 apache php API 不能在相同的环境中。我正在研究。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2016-06-11
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多