ODBC_connect работает только с пользователем psql

У меня есть 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.


person Helmuteke    schedule 08.06.2018    source источник
comment
Является ли PHP 32-битным или 64-битным? Что выводит ls -l /usr/local/psql/lib64/libodbcci.so и file /usr/local/psql/lib64/libodbcci.so?   -  person TallTed    schedule 08.06.2018
comment
я запускаю 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   -  person Helmuteke    schedule 08.06.2018
comment
вывод команды 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   -  person Helmuteke    schedule 08.06.2018
comment
Итак, теперь очевидное... что выводит ls -l /usr/local/psql/lib64/libodbcci.so.11 и file /usr/local/psql/lib64/libodbcci.so.11   -  person TallTed    schedule 08.06.2018
comment
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 дальше. . . -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   -  person Helmuteke    schedule 11.06.2018
comment
я добавил некоторые переменные в /etc/apache2/envvars, теперь он работает под браузером, но не как cronjob (пользовательские www-данные)   -  person Helmuteke    schedule 11.06.2018
comment
cronjob теперь тоже работает. . . я поместил все в шеллскрипт, и теперь я работаю   -  person Helmuteke    schedule 11.06.2018


Ответы (1)


Решение, как показано в комментариях -

Установите переменные среды для каждого пользователя и процесса, которые должны выполнить задачу, чтобы они соответствовали среде, которая была активна для PHP и пользователя psql.

Это было достигнуто за счет использования сценария оболочки для полной задачи.

person TallTed    schedule 11.06.2018
comment
Здравствуйте, столкнулся с похожей проблемой. Но я не уверен, какими должны быть эти переменные среды? Не могли бы вы помочь мне с этим? - person Cheeku Jee; 26.09.2018
comment
@CheekuJee Наиболее вероятными переменными, установленными первоначальным задавшим вопрос, будут PATH, LD_LIBRARY_PATH, ODBCINI и ODBCINSTINI. Есть много других возможностей. Вы должны задать свой вопрос, если это не решит вашу проблему. - person TallTed; 26.09.2018