SQLSRV 仅适用于 CLI,不适用于 APACHE 网络服务器
SQLSRV works for CLI only but not from APACHE webserver
我正在使用 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 数据库,select 一些内容并将其无错误地打印到屏幕上。
但是,从 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,但同样的错误不断出现。可能是什么问题?
我找到了这个问题的解决方案。原来服务器环境是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 却不能相同的环境。我正在研究那个。
我正在使用 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 数据库,select 一些内容并将其无错误地打印到屏幕上。
但是,从 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,但同样的错误不断出现。可能是什么问题?
我找到了这个问题的解决方案。原来服务器环境是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 却不能相同的环境。我正在研究那个。