Всем привет!
Имеется скрипт, в котором создается объект класса, назовем 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 все работает как надо.
Возможно, пользователю апача не хватает каких-то прав, но пока не понятно каких.