使用html在perl run perl中打开一个文件

时间:2015-12-09 11:11:01

标签: perl

我有一个HTML页面,我在其中运行Perl脚本以从HTML获取值并将其写入文件。
我面临的问题是,每当我从终端以root身份运行Perl脚本时,HTML页面都会更新并运行正常,但是如果我从HTML(使用Firefox浏览器)尝试同样的事情,它就会失败。也许是因为许可问题。

以下是我的HTML页面的摘录:

<div>  
    <form id="QA1_Insert" action="http://localhost/cgi-bin/person.pl" METHOD="POST" >    
                    <table>
                        <tr>
                             <td class="columnLabel"> Name</td>
                             <td><input type="text" name="Name"></td>
                            <td class="columnLabel">Address:</td>
                            <td><input type="text" name="Description"></td>
                        </tr>
                    </table>
<input type="submit" value="submit"></form> 
      </div>

这是我的人.pl:

#!/usr/bin/perl -w
use strict;
use CGI ':standard';
use warnings;
use IPC::System::Simple qw(system capture);
use DBI;
use Cwd qw(chdir);
use FileHandle;
use Fcntl;


#sysopen (FILE ,"/root/info/person.txt",O_RDWR|O_CREAT,0755);
open (my $file,"<","/root/info/person.txt");

chmod 755,$file;
print FILE "<html><head></head><body><p>sakshi</p></body></html>";

close (FILE);

print 
header(),
start_html(
    -title   => 'Command',
  -text    => '#520063'
);
print "Hello ";
print  end_html();

我尝试使用sysopen创建它,由于权限错误而无法正常工作。我也试过chmod。但是,两者都不起作用。任何关于如何解决它的建议都将不胜感激。

1 个答案:

答案 0 :(得分:4)

您的网络服务器未以 root 用户身份运行。那是正确的。它不应该这样做。由于您的文件位于root的主目录中,因此Web服务器用户无法访问它。 chmod命令和open一样失败。

将您的输出文件放在Web服务器可以访问的目录中(并且应该访问,与root的内容不同),它将起作用。

请注意,那里有词法和全局文件句柄。决定你想要哪一个。 (您想要$fh!)此外,您打开文件以便使用<进行阅读,然后尝试打印到该文件。这也行不通。

您应该检查open来电的返回值。例如,您可以说:

open my $fh, '<', $filename or die $!;

检查您的Web服务器的日志文件以查看错误。您正在使用strictwarnings,这很好,但如果您不查看错误消息,则无法从错误消息中获益。它可能会说 500内部服务器错误。您的Web服务器日志包含更多信息。

作为an alternativeuse CGI::Carp qw(fatalsToBrowser);会将其重定向到浏览器。不要在生产中使用它。

最后,请注意最近已从Perl核心中删除了CGI,并且在最近发布的CPAN上的CGI模块中,HTML创建函数已被弃用。它们不应该用在新代码中。