【问题标题】:ODBC_connect runs only with psql userODBC_connect 仅与 psql 用户一起运行
【发布时间】:2018-06-08 07:43:26
【问题描述】:

我有一个 php 脚本,它从 odbc 数据库(普及客户端)中获取数据。

当我在 CLI 中作为 psql 用户(安装程序创建)运行脚本时,我没有问题并且脚本运行。

当我在浏览器中(作为 www-data)或在 CLI 中以 root 或 cronjob 运行脚本时,我会收到错误消息:

PHP Warning:  odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib '/usr/local/psql/lib64/libodbcci.so' : file not found, SQL state 01000 in SQLConnect in /var/ww....

我已将用户 www-data & root 添加到普及客户端已安装的组中。

一切都在 Debian 服务器上运行。

【问题讨论】:

  • PHP 是 32 位还是 64 位? ls -l /usr/local/psql/lib64/libodbcci.sofile /usr/local/psql/lib64/libodbcci.so 的输出是什么?
  • 我运行的是 64 位版本,ls 命令的输出是:lrwxrwxrwx 1 psql pvsw 15 jun 5 15:52 /usr/local/psql/lib64/libodbcci.so -> libodbcci.so.11。文件命令的输出是:/usr/local/psql/lib64/libodbcci.so: symbolic link to libodbcci.so.11
  • ls 命令的输出是:lrwxrwxrwx 1 psql pvsw 15 jun 5 15:52 /usr/local/psql/lib64/libodbcci.so -> libodbcci.so.11。文件命令的输出是:/usr/local/psql/lib64/libodbcci.so: symbolic link to libodbcci.so.11
  • 所以现在很明显...ls -l /usr/local/psql/lib64/libodbcci.so.11file /usr/local/psql/lib64/libodbcci.so.11 的输出是什么
  • lrwxrwxrwx 1 psql pvsw 26 jun 5 15:52 /usr/local/psql/lib64/libodbcci.so.11 -> libodbcci.so.11.30.051.000 /usr/local/psql/lib64/libodbcci.so.11: symbolic link to libodbcci.so.11.30.051.000 further 。 . . -rwxr-x--- 1 psql pvsw 662429 jun 5 15:51 /usr/local/psql/lib64/libodbcci.so.11.30.051.000/usr/local/psql/lib64/libodbcci.so.11.30.051.000: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

标签: php odbc unixodbc


【解决方案1】:

解决方案,见 cmets --

为需要执行任务的每个用户和进程设置环境变量,以匹配 PHP 和 psql 用户处于活动状态的环境。

这是通过对整个任务使用 shellscript 来实现的。

【讨论】:

  • 您好,我遇到了类似的问题。但是,我不确定那些环境变量应该是什么?你能帮我解决这个问题吗?
  • @CheekuJee 原始提问者设置的最可能变量是PATHLD_LIBRARY_PATHODBCINIODBCINSTINI。还有很多其他的可能性。如果这不能解决您的问题,您应该提出自己的问题。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多