2

我最近使用 slackpkg 更新了我的 Slackware13.37,现在 firefox 显示我的 perl.cgi 脚本的内容而不是执行。我在用:

bash-4.2# httpd -v 
Server version: Apache/2.4.2 (Unix) Server built: May 24 2012 14:55:44
bash-4.2# firefox -v 
Mozilla Firefox 12.0
bash-4.2# perl -v 
This is perl 5, version 16, subversion 0 (v5.16.0) built for i486-linux-thread-multi

该脚本在更新前工作

#!/usr/bin/perl -w

use strict;
use warnings;
use CGI;
use DBI;
use PDF::API2::Simple;
use PDF::Table;
use Data::Types qw(:all);

my @param=();
###############################
###          main          ####
###############################
my $q = new CGI;
if(!defined $q->param('login')){
    if(!defined $q->param('query')){main::login_relogin('Welcome');
    }else{
    my ($fname,$lname,$sec,$w,$h) = main::read_cookie();
    if(defined $sec){
        main::home($fname,$lname,$sec,$w,$h,$q->param('query'),$q->param('param1'),$q->param('param2'));
    }else{main::login_relogin('Your session expired !!!');}
    }
etc... etc...

请帮忙

4

2 回答 2

3

我在使用 Apache 2.4.2 时遇到了同样的问题。

问题已解决:我的系统(openSUSE 12.1)默认不构建 mod_cgi.so。当我构建 Apache 2.2 时,CGI 是核心的一部分,而不是 2.4 中的动态模块。所以在运行configure的时候,需要加上--enable-cgi。此外,在 httpd.conf 中取消注释“LoadModule dir_module modules/mod_cgi.so”

或者,使用在我的系统上构建的 mod_cgid.so。根据http://httpd.apache.org/docs/current/mod/mod_cgi.html

“在 unix 下使用多线程 MPM 时,应使用模块 mod_cgid 代替此模块。在用户级别,这两个模块本质上是相同的”

因此,在 httpd.conf 中取消注释“LoadModule dir_module modules/mod_cgid.so”。还取消注释 httpd.conf 中的“Scriptsock logs/cgisock”(在指令中)。

于 2012-06-11T15:06:20.950 回答
2

基本上,您需要告诉 Apache 该文件是一个需要运行的脚本。

我需要这样做已经很长时间了,但除非事情发生了巨大变化,否则您只需要更新您的httpd.conf文件,可能通过将您的文件夹标记cgi-bincgi-bin文件夹。看起来升级并没有自动执行此操作。

于 2012-05-31T14:26:18.250 回答