2017-02-22 31 views
1
  • версии PHP: 7.0.14
  • Работа на Windows Server 2012
  • Файлы базы данных находятся в D: диск
  • Сайт/Application присваивается Заявке бассейн правильно
  • Assigned пула приложений имеет права доступа к D: привод

Попытка подключения и извлечения информации из базы данных ToppSpeed.ISAM Таблица не найдена, SQL состояния S0000 в SQLExecDirect

Созданный DSN правильно с использованием драйвера TopSpeed ​​ODBC.

Я создал образец сценария, чтобы проверить, работает он или нет.

odbctest.php

 $conn=odbc_connect("DSN_NAME",'',''); //Make a coonection to DSN 

     if (!$conn){ 
      exit("Connection Failed: " . $conn); 
     } 

     $sql="SELECT * FROM ExampleTableName"; // Query String 

     $rs=odbc_exec($conn,$sql);   //Execute Query <--- Error Line 

     if (!$rs) { 
      exit("Error in SQL"); 
     } 

     while (odbc_fetch_row($rs)){ 
      var_dump(odbc_result($rs,1)); 
     } 

     odbc_close($conn); 

Ошибка:

PHP Warning: odbc_exec(): SQL error: [SoftVelocity Inc.][TopSpeed ODBC Driver][ISAM]ISAM Table Not Found, SQL state S0000 in SQLExecDirect in C:\inetpub\wwwroot\projectFolder\odbctest.php on line 9

  • Рабочая: Когда я запускаю тот же файл на встроенном сервере PHP с помощью команды > php -S localhost:8002 и файл запуска в браузер на http://localhost:8002/odbctest.php Все работает отлично.

  • Работа: Когда я запускаю файл в командной строке > php odbctest.php Он отлично работает. Я получил данные из таблицы.

  • не работает: я добавил сайт в диспетчере IIS, связать веб-сайт (физический путь C:\inetpub\wwwroot\projectFolder) с локальным IP
    Когда я открываю, что odbctest.php в браузере с локальным IP я получаю Table NOT Found error.

Same Script, только различие заключается в том, что он работает в командной строке, а не на сервере IIS, он работает на встроенном сервере PHP и не работает в IIS.

другой техническая Разница

Я поставил один PHP файл, чтобы увидеть PHP информации на обоих серверах. Вот единственная разница, которую я нашел в этом.

  • встроенный сервер, работающий на PHP: В PHP Информация API Сервер: Встроенный HTTP-сервер
  • Не работает на сервере IIS: в PHP Информация сервера АФИ: CGI/FastCGI

не возникает в строке DSN, потому что, когда я меняю строку DSN с неизвестным, она указывает, что в строке DSN что-то не так.

Я думаю, что при попытке доступа к данным с сервера IIS может возникнуть некоторая проблема (PHP работает на CGI/FastCGI).

Мне интересно, есть ли проблема с разрешением, почему ошибка говорит, что таблица не найдена !!

Не найдена хорошая документация для ошибки подключения к базе данных TopSpeed, так как эта база данных широко не используется.

Любое предложение или идея? Пожалуйста, порекомендуйте. Заранее спасибо.

ответ

0

Ошибка SQL базы данных не было ничего о разрешении о том,

поэтому я создал простой другой PHP скрипт для добавления данных в текстовый файл.

Я побежал, что PHP скрипт с двумя тестов на сервере IIS

  • Test Case 1: Написать в текстовый файл который находится в директории проекта (тот же сервер) И PHP скрипт выполняется правильно и написал данные в текстовый файл.

  • Test Case 2: изменить путь текстового файла с файлом D:\AlarmPaymentsLogsDev\AlarmLogACH.txt (располагающийся на D диске) И когда я запустил его снова сценарий снова я получил следующее сообщение об ошибке:

Warning: file_put_contents(D:\AlarmPaymentsLogsDev\AlarmLogACH.txt): failed to open stream: Permission denied in C:\inetpub\wwwroot\alarm-payments-1\write.php on line 12

это подтверждает есть некоторые проблемы с разрешениями

App бассейн назначен на веб-сайте в менеджере IIS уже имел завивку ission до D: Driver. Так что это была не проблема. В дальнейших исследованиях, я обнаружил, что

мы должны идентифицировать пользователь первое что мы должны предоставить разрешение, и пользователем является значением «Anonymous идентификатора пользователя»

https://stackoverflow.com/a/32033941/5236174

https://www.iis.net/configreference/system.webserver/security/authentication/anonymousauthentication?showTreeNavigation=true

Я видел, что значение Анонимный пользовательский идентификатор не был пулом приложений!

Я изменил это на идентификатор пула приложений.

Итак, теперь анонимный идентификатор пользователя станет пулом приложений и имеет правильные разрешения.

После этого все работает отлично, так как нет разрешения.

Смежные вопросы