php odbc_connect to mssql работает в командной строке linux/ubuntu, а не в браузере

Я действительно чувствую, что провел исчерпывающий поиск по этому вопросу, нашел похожие проблемы и безуспешно пробовал ряд вещей, поэтому я впервые задаю вопрос здесь:

Я делаю много веб-страниц/веб-программирования (в основном PHP/jQuery) и размещаю эти страницы на сервере Drupal/Ubuntu моего отдела цифровой библиотеки. Я просто кодирую их и публикую через Dreamweaver, так как интерфейс Drupal мне не особо нужен. Мне просто нужен сервер для моих страниц.

В любом случае, я хочу создать несколько страниц PHP, которые могут подключаться к каталогу нашей библиотеки, поэтому я работал из командной строки сервера Drupal/Ubuntu. Установил unixODBC, повозился, установил FreeTDS, настроил драйвера и DSN.

Окончательно...

  1. Мне удалось подключиться к нашему каталогу через tsql и выполнить запрос.

  2. Я сделал базовый PHP-скрипт для проверки соединения:

    • Он работает из командной строки сервера Ubuntu (соединение успешно).

    • Он не работает, когда я загружаю его в браузере. Я получаю ужас:

Предупреждение: odbc_pconnect(): ошибка SQL: [unixODBC][Диспетчер драйверов]Имя источника данных не найдено, и драйвер по умолчанию не указан, состояние SQL IM002 в SQLConnect в /var/www/mydirectory/mytestpage.php в строке 15

ОБНОВЛЕНИЕ: я установил тестовый сервер Ubuntu в раздел на моем ноутбуке, где я начал с чистого листа, установил Apache2/PHP5 (с модулями mssql и odbc и т. д.)/FreeTDS и т. д. Я получил соединение tsql . Я сделал базовый PHP-скрипт и успешно запустил его из командной строки. Затем я перешел на страницу php из браузера, и это сработало! Мне все еще нужно, чтобы это произошло в версии сервера Drupal, но теперь я, по крайней мере, сузил проблему до чего-то на Drupal. сервер.

Я искал и нашел такие возможные причины, как:

  1. Права доступа к файлам, которые, я думаю, были исправлены, но не идут

  2. Возможно, я настроил пользовательский DNS, а не системный DNS, который я изо всех сил пытался исправить с помощью правильных параметров команды «odbcinst».

  3. Возможно, php должен работать в режиме CGI, а не как модуль. Но это казалось маловероятным из того, что я читал. И я не уверен, как это повлияет на Drupal. (Существуют ограничения на общесистемные изменения, которые я должен внести здесь.)

  4. Несколько человек сказали, что SElinux блокирует Apache от отображения страницы в браузере, но временное отключение SElinux не сработало.

Спасибо за любую помощь!


person user1673831    schedule 16.09.2012    source источник


Ответы (4)


Я предполагаю, что это как-то связано с файлом php. ини файл. В моей системе Ubuntu у меня есть 2. Один в /etc/php5/apache2/php.ini и один в /etc/php5/cgi/php.ini. Значения в пути apache2 необходимо будет скорректировать, чтобы разрешить соединение . К сожалению, помимо этого я не слишком полезен, так как использую MySQL и Mongo.

person Roger Thomas    schedule 18.09.2012
comment
Хм. Вы второй человек, который упомянул об этих отдельных файлах php.ini. Я убедился, что оба включают расширение mssql, но, возможно, мне следует просто провести полное сравнение файлов apache2 и cli php.ini, чтобы увидеть, отличается ли что-то ... Большое спасибо! - person user1673831; 18.09.2012

Убедитесь, что вы включили mssql.so и т. д. в следующем месте.

/etc/php5/apache2/php.ini, у вас будет еще один в /etc/php5/cli/php.ini

в Ubuntu php.ini будет поддерживаться отдельно для конфигурации cli и mod_php apache.

person Suriya    schedule 18.09.2012
comment
О, чувак, я действительно надеялся, что это оно. Но в обоих этих местах включен mssql.so. Тем не менее, большое спасибо, поскольку вы только что научили меня чему-то, чего я не знал! Спасибо еще раз! - person user1673831; 18.09.2012
comment
Все ли настройки для mssql в фактическом разделе mssql файла INI одинаковы? Я полагаю, что есть блок различных настроек для разных разъемов. - person Roger Thomas; 18.09.2012
comment
На самом деле я просто собираюсь сравнить два файла INI и посмотреть, что отличается. Я думаю, вы, должно быть, что-то знаете о разнице между двумя файлами, так как это имеет большой смысл в контексте того, что происходит. Спасибо! - person user1673831; 18.09.2012

Если вы собираетесь тестировать исходники odbc в командной строке, я бы посоветовал вам использовать утилиту isql вместо tsql. isql использует DSN, указанный вами в odbc.ini, для подключения к базе данных, тогда как tsql подключается непосредственно к вашей базе данных.

Если он работает с isql, он должен работать и на вашей веб-странице.

Также проверьте файлы сервера Drupal/Ubuntu /etc/odbc.ini (ваши источники DSN) и /etc/odbcinst.ini (настройки драйвера TDS), чтобы убедиться, что они совпадают с файлами в рабочей установке Ubuntu.

person Ronny Grønsdal    schedule 21.06.2014

Скопируйте свой php.ini с рабочего сервера на нерабочий сервер, добавьте необходимые переменные среды, доступные перед запуском вашего веб-сервера, и убедитесь, что ваш веб-сервер имеет полный доступ к вашим odbc и odbcinst ini-files. И так, используя базу знаний mssql или справку.

person EASemashko    schedule 28.12.2015