2017-02-20 73 views
-1

这是我的子程序。但是当我点击超链接时,它不会做任何事情,而我的期望是打开它指向的文件。Perl:文件协议

my $q= new CGI; 
    my $tablecontent=[$q->th(['Date', 'Count'])]; 
    for (sort keys %data) { 
    push @$tablecontent, $q->td([ $_, qq{<a href="file://home/niraj/apache2/log_files/result.$_">$data{$_}} ]) ; 
    } 
    print $q->table({ border => 1, -width => '20%'}, 
        $q->Tr($tablecontent), 
       ); 
+4

不计算代码示例的其他问题,你的意思是**点击** *在浏览器中?*如果是的话,如果没有任何与Perl代码... – jm666

回答

3

您的Perl代码按预期工作。问题在于你了解网络的工作原理。

您介绍与链接列表,像这样的用户:

  • 文件://home/niraj/apache2/log_files/result.xxx

file://协议表示链接到本地​​文件系统上可用的文件(本地系统上的浏览器)正在运行。这些链接很可能不起作用。

您需要为您的文件创建可通过网络访问的链接。最简单的方法是创建一个从log_files目录到Web服务器文档根目录下的目录的符号链接。

一些其他的东西,你可能会考虑:

  • 间接对象符号(new CGI)会导致一些很难发现问题。更好地使用CGI->new来代替。
  • CGI.pm中的HTML创建方法为deprecated for some time。请考虑一个模板系统。
  • CGI是用Perl编写Web应用程序的最佳方式,这已经有好几年了。请看看alternatives
+0

明白了。非常感谢。 现在正常工作。 –