【发布时间】:2015-08-03 17:02:44
【问题描述】:
我正在通过 html 中的 onclick 事件运行 cgi 脚本。
HTML
<button onclick="self.location='http:**link**/test.cgi?myfield=PRD7-QF_P7';">Click me</button>
test.cgi 脚本
use DBI;
use CGI::Carp qw(carpout fatalsToBrowser);
BEGIN
{
$ENV{'ORACLE_HOME'}='/data/softs/oracle/10.2.0.3/';
$ENV{'LD_LIBRARY_PATH'}='/data/softs/oracle/10.2.0.3/lib';
}
my $cgi = CGI->new;
#my $parameter = $cgi->param("myfield");
print "Content-type: text/html\n\n";
my $version = "2.1";
my $cgi = CGI->new;
my $parameter = $cgi->param("myfield");
print "Content-type: text/html\n\n";
print "This is a test perl script\n\n";
print "Parameter=${parameter}\n";
my $connection_details = DBstringToConnection($parameter);
my $AMDORA_TNS_FM = @$connection_details[0];
my $AMDORA_USER_FM = @$connection_details[1];
my $AMDORA_PASSWORD_FM = @$connection_details[2];
my $AMDORA_SCHEMA_FM = @$connection_details[3];
my $AMDORA_SERVICE_FM = @$connection_details[4];
my $dbhfm = DBI->connect("dbi:Oracle:$AMDORA_TNS_FM", $AMDORA_USER_FM,$AMDORA_PASSWORD_FM)
or die DBI->errstr;
我在文件开头设置了 Oracle_home 和 ld_library_path。 当我从 unix 终端运行 cgi 脚本时,它工作正常。但是当我从浏览器 HTML 文件运行脚本时,它给出了这个错误:
install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at (eval 9) line 3.
Perhaps the DBD::Oracle perl module hasn't been fully installed,
or perhaps the capitalisation of 'Oracle' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge, mysql.
at /remote/users/sasahu/public_html/dashboard/test.cgi line 47
我认为 DBI->connect 将使用 DBD::Oracle 包进行 Oracle 连接,它在 unix 终端中运行良好,但在浏览器中会出现上述错误。
谁能告诉我如何解决这个问题。 提前致谢。
【问题讨论】:
-
比较
@INC和你在 shell 中从perl -V得到的那个? -
您的
@$connection_details[0](以及下面的四行)写成$connection_details->[0]远没有那么容易混淆。或者也许将它们全部组合为my ($AMDORA_TNS_FM, $AMDORA_USER_FM, $AMDORA_PASSWORD_FM, $AMDORA_SCHEMA_FM, $AMDORA_SERVICE_FM) = @$connection_details。