【发布时间】:2018-10-28 14:15:40
【问题描述】:
我在网页上看到以下 Perl CGI 脚本的空白屏幕。 脚本在终端上执行得很好,但是当我从网络浏览器运行它时它是空白的。请帮忙。
当我将 Web 内容移动到页面顶部时,这会起作用。基本上我在数据库连接后放置的任何内容都不会显示在网络浏览器上。
操作系统:Unix Apache2 网络服务器
注意:脚本有执行权限。
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use CGI;
print "Content-type: text/html\n\n";
# Simple HTML code follows
my $driver= "Oracle";
my $dsn = "DBI:$driver:sid=xxxxx;host=xxxxx;port=1521";
my $dbh = DBI->connect($dsn,'xxxx','xxxx');
#print $dbh;
my $sth = $dbh->prepare("SELECT * FROM TABLE WHERE ROWNUM <= 10");
$sth->execute;
print "<html> <head>\n";
print "<title>Hello, world!</title>";
print "</head>\n";
print "<body>\n";
print "<h1>Hello, world!</h1>\n";
print "<p>The Details are as follows:</p>\n";
print "<table cols=5 border=1>\n";
print "<tr>\n";
print "<th>ACTION</th>\n";
print "<th>ALARM_TEXT</th>\n";
print "<th>ALARM_SEV</th>\n";
print "<th>EMS_NAME</th>\n";
print "</tr>";
while( my $ref = $sth->fetchrow_hashref() ) {
print "<tr>\n";
print "<td>", $ref->{'ACTION'}, "</td>\n";
print "<td>", $ref->{'ALARM_TEXT'}, "</td>\n";
print "<td>", $ref->{'ALARM_SEV'}, "</td>\n";
print "<td>", $ref->{'EMS_NAME'}, "</td>\n";
print "</tr>\n";
}
print "</table>\n";
print "<h1>Hello, world!</h1>\n";
print "</body> </html>\n";
【问题讨论】:
-
嗯,怎么了?
-
我已更新问题。请检查。我得到黑屏。如果我将一些内容放在 DB 连接之上,那么这些内容就会打印在网页上。
-
你做了什么调试?你甚至检查过错误信息吗?在确定问题之前,我们无法帮助您解决问题!
-
“基本上我在 DB 连接后放置的任何内容都不会显示在 Web 浏览器上。” - 我的猜测是 DB 连接失败,因此
$dbh是在$dbh->prepare中未定义和后续使用$dbh将导致致命错误并退出进程。但有关详细信息,请查看您应该在 Apache 的错误日志中找到的错误消息。 -
@SteffenUllrich:是的,你是对的。 Apache 日志中的错误是 [Fri May 18 04:51:31 2018] [error] [client 159.166.29.10] DBI connect('sid=xxxxx;host=xxxxx;port=1521,'xxxxx',...) failed : 错误 OCIEnvNlsCreate。在 /var/www/cgi-bin/Test.pl 第 27 行 [Fri May 18 04:51:31 2018] 检查 ORACLE_HOME (Linux) 环境变量或 PATH (Windows) 和/或 NLS 设置、权限等[client 159.166.29.10] 无法在 /var/www/cgi-bin/Test.pl 第 31 行的未定义值上调用方法“prepare”。但我不知道为什么它不选择 ORACLE_HOME。我在哪里可以设置它,以便它是永久的?