У меня есть следующий PHP:
odbc_connect("Driver={ODBC Driver 13 for SQL Server};Server=$server;Database=$database;", $user, $password);
Когда этот код подается с веб-страницы, он работает нормально, возвращая resource(2, odbc link)
. Однако при вставке того же кода в сценарий командной строки не удается подключиться и выдается следующее предупреждение:
PHP Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found, SQL state 01000 in SQLConnect in /path/file.php on line 7
Проверка phpinfo()
и php -i
Я вижу, что загруженные модули, файлы конфигурации ini и настройки unixodbc идентичны.
Для чего бы то ни было, я могу изменить строку подключения, чтобы использовать DSN=MyMSSQLServer
вместо Driver={...}
, и то же самое происходит; он работает в apache, но не в скрипте CLI.
Что мне не хватает, чтобы эти соединения работали одинаково в CLI?
Обновление
После долгих испытаний я обнаружил, что в начале моего сценария помещается следующее:
putenv('ODBCSYSINI');
putenv('ODBCINI');
(или просто unset ODBCSYSINI
и unset ODBCINI
перед запуском скрипта из bash) заставляет его работать внезапно. Я не уверен почему. Очевидно, что эти переменные не существуют при запуске как Apache. Они как-то отменяют настройки по умолчанию где-то?