Задать вопрос
@EASemashko

Как правильно устанавливать переменные окружения для корректной работы odbc из PHP?

Всем привет!
Имеется скрипт, в котором создается объект класса, назовем CPConnect.
В этом классе, в конструкторе происходит следующее:
private function set_openedge_env() {
            putenv("DLC=/usr/dlc");
            putenv("ODBCINST=/home/odbcinst.ini");
            putenv("ODBCINI=/home/odbc.ini");
            putenv("LD_LIBRARY_PATH=/usr/dlc/odbc/lib");
        }

function __construct() {
            $this->set_openedge_env();
            if ($this->conn_id = odbc_connect($this->dsn, $this->db_user, $this->db_pass, SQL_CUR_USE_ODBC)) {

            } else {
                throw new Exception("Сonnect error. " . $this->conn_id);
            }
        }


Вот кусок кода из скрипта, в котором вызывается этот конструктор
$progressConnect = new CPConnect();
echo getenv("DLC");


При этом, если запускать из консоли Ubuntu, на экране получается такой результат:
/usr/dlc


Если запускать из веб-браузера, то на экране пусто. При этом ошибка в логах возникает такая:
odbc_connect(): SQL error: [unixODBC][Driver Manager]Data source name not found, and no default driver specified, SQL state IM002 in SQLConnect


Гугление особо ничего не дало конкретно в моем случае, разве что вот эту ссылку, эту и эту. По первой ссылке ситуация не решается, по второй и третьей пока тоже.

Апач имеет пользователя, отличного от того, из которого я работаю в командной строке. Из всего описанного я прихожу к выводу, что для пользователя апача переменные окружения просто не устанавливаются, из-за этого не работает скрипт.

В phpinfo() выводятся все нужные переменные, safemode отключен.

Настройка /etc/environment и прописывание envars для апача также не дали результатов.
Как это вылечить?

Интересно, что на соседнем сервере с теми же настройками php.ini все работает как надо.
Возможно, пользователю апача не хватает каких-то прав, но пока не понятно каких.
  • Вопрос задан
  • 320 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@EASemashko Автор вопроса
Вопрос решился установкой настроек в php и заданием нужных прав.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
romy4
@romy4
Exception handler
скопировать из текущего юзера нужные odbc переменные
/home/odbcinst.ini — очень странные пути
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы