Apache не выполняет Perl-скрипты

Я использую Mac OS High Sierra 10.13.06. Я следовал этому руководству https://discussions.apple.com/docs/DOC-12034, но не смог заставить работать мой perl-скрипт. Браузер просто предлагает его скачать. Я также пытался загрузить mod_cgi, но это не помогло.

sudo apachectl -M

показывает, что perl_module и cgi_module загружены. Вот файл error_log:

[Tue Dec 10 11:02:01.586530 2019] [mpm_prefork:notice] [pid 77] AH00169: caught SIGTERM, shutting down
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using MacBook-Air-Nikita.local. Set the 'ServerName' directive globally to suppress this message
[Tue Dec 10 11:02:01.912225 2019] [mpm_prefork:notice] [pid 504] AH00163: Apache/2.4.33 (Unix) PHP/7.1.16 mod_perl/2.0.9 Perl/v5.18.2 configured -- resuming normal operations
[Tue Dec 10 11:02:01.912331 2019] [core:notice] [pid 504] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

это мой конфигурационный файл в /etc/apache2/users

<Directory "/Users/nikitakirenkov/Sites/">
        AddLanguage en .en
        AddHandler perl-script .pl
        PerlHandler ModPerl::Registry
        Options Indexes MultiViews FollowSymLinks ExecCGI
        AllowOverride None
        Require host localhost
</Directory>

PHP-скрипты работают хорошо


person Kaiser    schedule 10.12.2019    source источник
comment
Вы сделали скрипт исполняемым?   -  person Holli    schedule 10.12.2019
comment
Re Браузер просто предлагает загрузить его. Вам нужно указать Apache, какие файлы следует рассматривать как CGI-скрипты. документы   -  person ikegami    schedule 10.12.2019
comment
Кроме того, если это CGI-скрипт, вам не нужен mod_perl.   -  person ikegami    schedule 10.12.2019
comment
да мой скрипт исполняемый и я не хочу использовать cgi, я хочу только mod_perl   -  person Kaiser    schedule 10.12.2019
comment
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, поскольку он принадлежит unix.stackexchange.com   -  person ceving    schedule 10.12.2019
comment
Добавьте строку shebang в начало программы. и добавьте print "Content-Type: text/html\n\n"; перед тем, как что-либо печатать   -  person mkHun    schedule 10.12.2019
comment
mkHun, это не помогло   -  person Kaiser    schedule 10.12.2019
comment
мне нужен только mod_perl В 2019 году я думаю, что это ужасная идея.   -  person Dave Cross    schedule 10.12.2019
comment
Re да, мой скрипт исполняемый, и я не хочу использовать cgi, я хочу только mod_perl, это утверждение не имеет смысла. mod_perl предназначен для программ, специально написанных для mod_perl. mod_cgi предназначен для программ, специально написанных для CGI. (Вы можете запускать CGI-программы, используя mod_perl с помощью ModPerl::Registry, но это не будет работать для всех CGI-программ.) Итак, что у вас есть?   -  person ikegami    schedule 10.12.2019
comment
Или superuser.com   -  person ikegami    schedule 10.12.2019


Ответы (1)


Если вы действительно хотите использовать mod_perl, а модуль уже загружен, то это работает для меня. Я использую псевдоним perl-bin для скриптов mod_perl.

  1. Файл /etc/apache2/conf-доступен

`

PerlModule ModPerl::Registry
PerlModule Apache::DBI;    
PerlModule Apache2::compat;

PerlPostConfigRequire /etc/apache2/startup.pl

ScriptAlias /perl-bin/ /usr/lib/perl-bin/
<Directory "/usr/lib/perl-bin">
       AllowOverride None
       Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
       SetHandler perl-script
       PerlResponseHandler ModPerl::Registry
       PerlOptions +ParseHeaders
       Require ip 127.0.0.1 192.168.0.0/16
</Directory>

`

Включите конфигурацию: `

a2enconf perl

`

  1. Файл /etc/apache2/startup.pl

    1;

  2. Протестируйте mod_perl с помощью скрипта в /etc/lib/perl-bin

Откройте веб-страницу и несколько раз нажмите F5, после чего количество должно увеличиться....

`

#!/usr/bin/perl
use strict;
use vars qw($count);
use utf8;

my $mod_perl_in_use = $ENV{MOD_PERL_API_VERSION};

print "<h1>Count test </h1>";
print "<b>Mod_perl test script</b><br><br>\n";
$count++;
print "The following count will start at 1 and will increment by 1 on each refresh \n";
print "(If this was a non-mod_perl script, the counter would always be 1).<br>\n";
print "count = $count\n<br><br>";
print "pid = $$\n<br><br>";

if ($ENV{'MOD_PERL'}) {
    print "Mod_perl is installed on this server: $ENV{'MOD_PERL'}<br><br>\n";
} else {
    print "Mod_perl is not installed on this server<br><br>\n";
}

print "<b>Environment variables</b><br>\n";
foreach my $key (sort keys %ENV)
{
    print "\"$key\" = \"$ENV{$key}\"<BR>\n";
}

`

person Rob Lassche    schedule 10.12.2019