我有以下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');
(或者在从bash运行脚本之前只是unset ODBCSYSINI
和unset ODBCINI
)使其突然起作用。我不知道为什么。显然,以apache运行时,这些变量不存在。他们会以某种方式覆盖默认设置吗?