У меня проблемы с получением драйвера IBM DB2 IBM DB для работы с mod_perl. Мой тестовый скрипт:
<code>#!/usr/bin/perl
use strict;
use CGI;
use Data::Dumper;
use DBI;
{
my $q;
my $dsn;
my $username;
my $password;
my $sth;
my $dbc;
my $row;
$q = CGI->new;
print $q->header;
print $q->start_html();
$dsn = "DBI:DB2:SAMPLE";
$username = "username";
$password = "password";
print "<pre>".$q->escapeHTML(Dumper(\%ENV))."
";
$ dbc = DBI-> connect ($ dsn, $ username, $ password);
$ sth = $ dbc-> prepare ("SELECT * FROM SOME_TABLE WHERE FIELD = 'SOMETHING'");
$ Sth-> Execute ();
$ row = $ sth-> fetchrow_hashref ();
печать "
".$q->escapeHTML(Dumper($row))."
";
print $ q-> end_html;
}
Этот скрипт работает как CGI, но не под mod_perl. Я получаю эту ошибку в журнале ошибок Apache:
DBD::DB2::dr connect warning: [unixODBC][Driver Manager]Data source name not found, and no default driver specified at /usr/lib/perl5/site_perl/5.8.8/Apache/DBI.pm line 190.
DBI connect('SAMPLE','username',...) failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified at /data/www/perl/test.pl line 15
Прежде всего, почему он использует ODBC? Установлен собственный драйвер DB2 (следовательно, он работает как CGI).
Запуск Apache 2.2.3, mod_perl 2.0.4 под RHEL5.
У этого парня была та же проблема, что и у меня:
http://www.mail-archive.com/dbi-users@perl.org/msg22909.html
Но я понятия не имею, как он это исправил. Какое отношение mod_php4 имеет к mod_perl?
Любая помощь будет принята с благодарностью, мне не повезло с Google.
Обновление
Как указал james2vegas, проблема связана с PHP: я отключаю PHP все вместе и получаю другую ошибку:
Total Environment allocation failure! Did you set up your DB2 client environment?
Я считаю, что эта ошибка связана с неправильной настройкой переменных среды, а именно DB2INSTANCE
. Однако я не могу отключить PHP для решения этой проблемы (он мне нужен для некоторых устаревших приложений). Итак, теперь у меня есть 2 вопроса:
- Как я могу исправить исходную проблему, не отключая PHP все вместе?
- Как я могу исправить проблему с окружающей средой?
Я правильно установил переменные DB2INSTANCE, DB2_PATH и SQLLIB, используя SetEnv
и PerlSetEnv
в httpd.conf
, но безуспешно.
Примечание. Я отредактировал код, чтобы определить, связана ли проблема с сохранением глобальной переменной.