Выполнить Perl-скрипт из Perl CGI-скрипта - PullRequest
0 голосов
/ 07 мая 2018

Я хочу выполнить Perl-скрипт из Apache Perl CGI-скрипта.

CGI отлично работает, показывая текст HTML, но когда я пытаюсь выполнить другой скрипт с qx//, он не работает.

HTML

<!DOCTYPE HTML>
<html>
<head>
<title>SUMAR</title>
</head>
<body>
<center>
<h1>Registro de usuario</h1>
<form method="get" action="cgi-bin/index.cgi">
    Nombre <input type="text" name="name">
    <br>
    <br>
    Usuario <input type="text" name="user">
    <br>
    <br>
    Contraseña  <input type="text" name="pass">
    <br>
    <br>
    Correo electronico  <input type="text" name="email">
    <br>
    <br>
    <input type="submit" value="Enviar">
</form>
</center>
</body>
</html>

Perl CGI

#!/usr/bin/perl

use Unix::Passwd::File;
use File::Path;
use CGI;
use strict;

my $cgi = new CGI;
my $name = $cgi->param("name");
my $user = $cgi->param("user");
my $pass = $cgi->param("pass");
my $email = $cgi->param("email");

print "Content-type: text/html\n\n";
print "<html>\n<body>\n";
print $name . $user . $pass . $email;
print "\n</body>\n</html>";

qx(perl index.pl);

Когда я выполняю CGI из командной строки, вызов index.pl работает отлично, но когда я пытаюсь через Интернет, он не работает.

EDIT :::::::::::::::.

apache2/error.log
.....
[Mon May 07 12:31:41.070830 2018] [cgid:error] [pid 6039:tid 139761641543424] [client 172.28.200.230:59210] End of script output before headers: index.cgi, referer: http://172.20.3.107/
[Mon May 07 12:50:14.129598 2018] [cgid:error] [pid 6523:tid 139761926846336] (13)Permission denied: AH01241: exec of '/usr/lib/cgi-bin/index.pl' failed
[Mon May 07 12:50:14.130080 2018] [cgid:error] [pid 6040:tid 139761717077760] [client 172.28.200.230:59324] End of script output before headers: index.pl, referer: http://172.20.3.107/
mkdir /home/hgjhh: Permission denied at index.pl line 23.
mkdir /home/hgjhh: Permission denied at index.pl line 23.
[Mon May 07 13:15:25.420469 2018] [cgid:error] [pid 6040:tid 139761599579904] [client 172.28.200.230:59613] AH01264: script not found or unable to stat: /usr/lib/cgi-bin/index.pli
mkdir /home/hgjhh: Permission denied at /usr/lib/cgi-bin/index.pl line 23.
mkdir /home/hgjhh: Permission denied at /usr/lib/cgi-bin/index.pl line 23.
[Mon May 07 13:26:56.046889 2018] [mpm_event:notice] [pid 6035:tid 139761926846336] AH00491: caught SIGTERM, shutting down
[Mon May 07 18:22:57.342819 2018] [mpm_event:notice] [pid 534:tid 140120374777728] AH00489: Apache/2.4.10 (Debian) configured -- resuming normal operations
[Mon May 07 18:22:57.364426 2018] [core:notice] [pid 534:tid 140120374777728] AH00094: Command line: '/usr/sbin/apache2'

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы делаете предположения о текущем рабочем каталоге, которые могут быть неверными.

Если index.pl находится в том же каталоге, что и сценарий CGI,

qx(perl index.pl);

должно быть

use FindBin            qw( $RealBin );
use String::ShellQuote qw( shell_quote );

my $cmd = shell_quote("perl", "--", "$RealBin/index.pl");
qx($cmd);

или

use FindBin             qw( $RealBin );
use IPC::System::Simple qw( capturex );

capturex("perl", "--", "$RealBin/index.pl");

В обоих случаях "perl", "--", "$RealBin/index.pl" может быть уменьшено до "$RealBin/index.pl", если index.pl является исполняемым.


Это может быть или не быть вашей единственной проблемой. Пока вы не сообщите нам, с какой проблемой вы столкнулись (например, сообщив нам, какую ошибку вы получаете), мы не сможем вам помочь.

0 голосов
/ 07 мая 2018

Вы можете использовать систему следующим образом:

system("/path/to/index.pl", @args);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...