【问题标题】:Perl cgi scripts ran as plain textPerl cgi 脚本以纯文本形式运行
【发布时间】:2013-12-31 22:54:51
【问题描述】:

在我们开始之前,我想说我已经阅读了这个:Perl Apache : Perl script displayed as plain text

我读过,试过了,没成功(遗憾)

我在 Ubuntu 上

我想运行 cgi 脚本,它们编译得很好,我对文件夹有适当的权限(至少当我尝试通过浏览器输入它时我没有收到错误)并且文件运行作为纯文本。

首先是我要运行的文件:

 #!/usr/bin/perl

 use CGI qw/:standard/;
 print header,
 h1('CGI.pm is simple.'),
 end_html; 

我得到源代码作为输出。

文件夹的路径是/var/www/a2/

apache .config 文件中的配置是:

ScriptAlias /a2/ /var/www/a2/
<Directory "/var/www/a2">
AddHandler cgi-script .cgi .pl
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

文件编译良好并在终端打印html。

我唯一的猜测是我没有授予该文件的适当权限。

编辑:我检查了错误日志。它不会为此给出错误。

编辑:在与 Mark Setchell 进行了长时间的讨论后,发现了错误。我在错误的 .config 文件中发布了这个,而且我一直在使用错误的(未配置的文件夹)。

【问题讨论】:

    标签: perl apache cgi


    【解决方案1】:

    这里有一些事情可以尝试:

    1. 确保您的脚本以扩展名“.pl”命名

    2. 确保您的脚本是可执行的。输入:

      chmod +x yourscript.pl

    3. 正如 Mark 所说,确保将 shebang 作为脚本的第一行:

      #!/usr/bin/perl

    4. 去掉“1;”最后,你只需要包/模块。

    【讨论】:

    • 1) 脚本扩展名为 .pl。 2)我以root身份执行命令。 3)我有shebang。 4) 我用我正在使用的新示例更新了脚本(更短更直接)。它仍以纯文本形式打印。
    • 那么,如果脚本名为“fred.pl”,当你输入“./fred.pl”时会发生什么
    • 好的!我们正在取得进展。我没有运行脚本的权限。它说“权限被拒绝”。脚本是 tt1.pl,我运行的命令是 sudo chmod -x tt1.pl 没有错误。
    • 稍等片刻,尝试输入“chmod 777 tt1.pl”,然后再试一次。
    • 它仍然不起作用,现在当我尝试运行它时它会出错(./tt1.pl)
    【解决方案2】:

    我没看到

    #!/usr/bin/perl
    

    在脚本的顶部。没有它,CGI 处理程序将不知道如何执行它。

    【讨论】:

    • 出现了一个有趣的错误!现在它正在尝试下载它:D 编辑:在浏览器中下载时询问我在哪里下载文件。
    【解决方案3】:

    确保启用 apache cgi 模式

    sudo a2enmod cgi   //will enable the cgi mode
    sudo service apache2 restart
    

    确保.cgi文件的文件权限没问题

    sudo chmod 755 yourFile.cgi
    

    尝试通过终端执行

    perl /Path_To_The_File/fileName.cgi
    

    确保您的 fileName.cgi 在文件顶部包含以下代码

    #!/usr/bin/perl -w
    
    print "Content-type: text/html\n\n";
    

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2016-03-17
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2014-10-30
      相关资源
      最近更新 更多