-2

我正在制作一个 .cgi 文件,它以表格格式打印网页上数据库表中的所有值。问题是当我在 putty 终端模拟器上运行文件时它工作正常但是当我尝试在浏览器上运行文件时我得到即使 T 键入了服务器上文件的正确位置,也会出现错误消息“找不到文件”。

我不明白我做错了什么?我使用 putty 将文件的权限设置为 chmod 755 * 但它仍然无法正常工作。这是文件权限问题还是表结构在浏览器上运行时出现错误?

请帮忙...

人.CGI文件

 #!/usr/bin/perl
 use CGI;
 use DBI;
 use strict;
 #use warnings;
 #use diagnostics;
 print "Content-type:text/html\r\n\r\n";
 #$q = CGI->new;
 #print  $q->header;
 my $dsn = "DBI:mysql:Demo:localhost";   # Data source name
 my $username = "mint";                 # User name
 my $password = "MINT123";              # Password
 my $dbh;
 my $sth;                          # Database and statement handles
 $dbh = DBI->connect($dsn, $username, $password);

 $sth = $dbh->prepare("SELECT * from people");

 $sth->execute();

 print "<h1>ganesh</h1>";
 print "<table >
 <tr>
 <th>ID</th>
 <th>Name of People Involved</th>
 <th>Position</th>
 <th>Roles(A user can have multiple roles)</th>
 <th>Notes</th>
 </tr>";
 while( my $href = $sth->fetchrow_hashref )
 {
   print "<tr>";
   print "<td>$$href{'id'}</td>";
   print "<td>$$href{'name'}</td>";
   print "<td>$$href{'pos'}</td>";
   print "<td>$$href{'role'}</td>";
   print "<td>$$href{'notes'}</td>";
   #print "<td><input type='text' value=\"$$href{'display_name'}\" id =\"dis-$$href{'windows_id'}\" readonly> </td>";
   #print "<td><input type='text' value=\"$$href{'email_id'}\" readonly> </td>";
   print "</tr>";
 }
 print "</table>";

 $sth->finish();
 $dbh->disconnect();

数据库表结构...

在此处输入图像描述

表数据...

在此处输入图像描述

当我在腻子中运行文件时输出...

在此处输入图像描述

当我尝试在浏览器上运行文件时出现消息..

在此处输入图像描述

4

1 回答 1

11

您之前收到的两个答案完全是胡说八道。您不需要使用 CGI 对象来运行 CGI 程序。当然,它使事情变得更容易,但这不是必需的。

您的程序需要处理的 CGI 协议的唯一部分是 Content-Type 标头。你正在用你的打印线来做这件事。

不,您的问题完全出在其他地方。但是,不幸的是,在某个地方,我们可以在不知道更多的情况下提供很少的帮助。您收到文件未找到错误,因为 Web 服务器找不到您的代码。换句话说,您在浏览器中输入的地址 (128.9.45.170/~pankaj.yadav/Test/cgi/people.cgi) 与您的 Web 服务器上的文件名不匹配。

这一切都取决于您的 Web 服务器的配置方式。网址如何映射到文件路径?我们不知道。只有您的网络服务器管理员才能确定答案。

如果您查看 Web 服务器错误日志,您可能会得到一个线索。您将在日志中看到一个文件未找到错误,该错误将(希望)包含 Web 服务器试图查找的实际文件路径。这可能会帮助您确定应该将 CGI 程序放在哪里。

于 2013-05-23T10:02:36.040 回答