У нас есть сервер, работающий на
32-битный IIS6.0 Windows Server 2003 (у нас есть некоторые классические приложения ASP, которые используют 32-битные компоненты, поэтому мы не можем перейти на 64-битную версию 2008)
Наш сервер БД находится на отдельном компьютере под управлением Windows Server 2008, 64-разрядная версия MS SQL 2008 R2, 64-разрядная версия
. Я установил следующую версию PHP PHP 5.3.10 Дата сборки 2 февраля 2012 г. 20:26:31 Компилятор MSVC9(Visual C ++ 2008)
PHP отлично работает на статических страницах, но проблема заключается в попытке подключения к MSSQL.Нам нужно подключиться к MSSQL из-за большого количества унаследованного кода в ASP и существующей БД MSSQL.
У меня установлен SQL Native Client 2008, я устанавливал его несколько раз.Я проверил, и библиотеки DLL находятся в папке system32.
Это загружаемые расширения
[PHP_SQLSRV_53_NTS_VC9]
extension=php_sqlsrv_53_nts_vc9.dll
[PHP_PDO_SQLSRV_53_NTS_VC9]
extension=php_pdo_sqlsrv_53_nts_vc9.dll
Когда я запускаю phpinfo, я не вижу драйвера sqlsrv в списке
Я проверил журнал ошибок PHP и получил следующую ошибку
[22-Mar-2012 14:04:27 UTC] PHP Warning: PHP Startup: sqlsrv: Unable to initialize module
Module compiled with build ID=API20090626,NTS,VC9
PHP compiled with build ID=API20090626,TS,VC9
These options need to match
in Unknown on line 0
[22-Mar-2012 14:04:27 UTC] PHP Warning: PHP Startup: pdo_sqlsrv: Unable to initialize module
Module compiled with build ID=API20090626,NTS,VC9
PHP compiled with build ID=API20090626,TS,VC9
These options need to match
in Unknown on line 0
Если я изменю расширение на использование Threaded Safe и перезапущу пул приложений, все равно получаю эту ошибку.
Я несколько раз пытался переустановить Native Client и PHP, но безуспешно.
Я получил другую ошибку, прежде чем sqlsrv не смог распознать собственный клиент, но теперь php не распознает sqlsrv.
ОБНОВЛЕНИЕ
Мне удалось сделать это с правильным драйвером sqlsrv и без ошибок в php errorlog
Но при использовании этого скриптаподключиться или дать мне ошибку в sql
<?php
$serverName = 'DBSERVER';
$connParams = array('UID'=>'UID', 'PWD'=>'PASSWORD', 'Database'=>'DATABASENAME','ReturnDatesAsStrings'=> true);
$conn = sqlsrv_connect($serverName, $connParams);
if(!$conn){
$errors = sqlsrv_errors();
die(var_dump($errors));
}
sqlsrv_connect($conn);
die('connected');
?>
и я получаю эту ошибку
> array(2) { [0]=> array(6) { [0]=> string(5) "IMSSP" ["SQLSTATE"]=>
> string(5) "IMSSP" [1]=> int(-49) ["code"]=> int(-49) [2]=> string(390)
> "This extension requires either the Microsoft SQL Server 2008 Native
> Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native
> Client ODBC Driver to communicate with SQL Server. Neither of those
> ODBC Drivers are currently installed. Access the following URL to
> download the Microsoft SQL Server 2008 R2 Native Client ODBC driver
> for x86: http://go.microsoft.com/fwlink/?LinkId=163712" ["message"]=>
> string(390) "This extension requires either the Microsoft SQL Server
> 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2
> Native Client ODBC Driver to communicate with SQL Server. Neither of
> those ODBC Drivers are currently installed. Access the following URL
> to download the Microsoft SQL Server 2008 R2 Native Client ODBC driver
> for x86: http://go.microsoft.com/fwlink/?LinkId=163712" } [1]=>
> array(6) { [0]=> string(5) "IM002" ["SQLSTATE"]=> string(5) "IM002"
> [1]=> int(0) ["code"]=> int(0) [2]=> string(91) "[Microsoft][ODBC
> Driver Manager] Data source name not found and no default driver
> specified" ["message"]=> string(91) "[Microsoft][ODBC Driver Manager]
> Data source name not found and no default driver specified" } }
ОБНОВЛЕНИЕ 2
Я установил инструменты SQLCMD, и он правильно подключается к серверу.
DLLверсии:
SQLNCLI10.DLL 2009.100.1600.1
SQLSRV32.DLL 2000.85.1117.0 (Я обновил эту версию с помощью DLL с другого сервера, но все равно не помог) Это сейчас версия 6.1.7600.16385
Как указано выше, установлен Native Client 2008 R2 (библиотеки находятся в windows \ system32), а БД запущена и работает.Если я запускаю тот же сценарий с другого сервера, он работает.
Я попытался с другими разрешениями для пула приложений, родных клиентских библиотек DLL и папки расширения php без удачи.
Любые идеи будутотлично.
ОБНОВЛЕНИЕ 3
Как оказалось, это была проблема с разрешениями!
Я скачал Process Monitor и последовалинструкции к этому сообщению
http://www.iislogs.com/articles/processmonitorw3wp/
Тогда я увидел, что процессу w3wp.exe было отказано в доступе к этому ключу реестра
HKLM \ Software \ ODBC \ ODBCINST.INI \ SQL Native Client 10.0
Я открыл RegEdit и перешел к этому ключу.
Я щелкнул правой кнопкой мыши -> Разрешения, добавил сетевую службу в список и дал ей разрешения на чтение.
Переработан пул приложений, и он теперь работает!
Приветствия, Федерал