• Publicidad

Ejecutar Perl desde PHP

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ejecutar Perl desde PHP

Notapor Ryo_Akiyama » 2008-07-13 11:31 @521

Veréis, tengo la siguiente duda:

Estoy haciendo una web que utiliza un programa hecho en Perl situado en mi servidor web.

El caso es que ese programa en Perl recibe un parámetro (obtenido mediante un textarea de la página) y lo trata.

He probado a hacer un pequeño programa en Perl de prueba, y utilizando la función exec en PHP he conseguido ejecutarlo enviándole el parámetro del textarea.

Pero sin embargo mi programa grande (que tiene 5 "use"), al ejecutar la función exec en PHP no se ejecuta como es debido, si comento las líneas "use", sí funciona, pero claro, no funciona correctamente porque ese programa necesita esas líneas para su correcto funcionamiento.

No sé si me he explicado mal, jeje.

El caso es que necesito ejecutar desde PHP un programa en Perl enviándole un parámetro y o bien la función exec no funciona bien aquí, o es que estoy haciendo algo mal.

Si alguien tiene alguna idea de esto agradeceré su ayuda.

PD: No sé exactamente en qué subforo irá esto, ni tampoco a qué nivel corresponde. Lo siento.
Ryo_Akiyama
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-07-13 11:29 @520

Publicidad

Notapor explorer » 2008-07-13 12:21 @556

Bienvenido a los foros de Perl en Español, Ryo_Akiyama.

En estos foros ya se ha comentado este tema de ejecutar Perl desde PHP. Usa el sistema de búsqueda.

Dices que funciona mal al poner los 'use', pero no indicas qué fallo sale.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ryo_Akiyama » 2008-07-13 13:24 @600

Gracias por contestar.

Ya había usado el buscador, pero no he encontrado ninguna respuesta parecida.

El caso es que no me devuelve ningún error, simplemente no hace lo que tiene que hacer.

Para que te hagas una idea, el principio del programa es así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!c:\Perl\bin\perl.exe

use strict;
use CGI;
use Tokenizador;       # Extrae los vectores a partir de un documento
use Modelo;            # Constuye el modelo a partir de un corpus
use Clasificador;      # Clasifica un documento

my $carpeta_corpus=".\\corpus\\";
my $carpeta_modelo=".\\modelo\\";

my @array=@ARGV;
my $cadena = join(" ", @array);
print $cadena;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cuando la pagina PHP ejecuta el programa no imprime nada por pantalla, sin embargo si comento las líneas de 'use' me imprime la cadena ($cadena).

Por cierto, los paquetes Tokenizador, Modelo y Clasificador son archivos .pm que se encuentran en la misma ruta que el programa .pl.
Ryo_Akiyama
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-07-13 11:29 @520

Notapor explorer » 2008-07-13 14:02 @626

A ver... hay que tener una serie de conceptos claros...

¿Qué quieres decir con 'imprimir por pantalla'? ¿Salida estándar del programa en un terminal o ventana de línea de comandos o una página web?

¿El código PHP lo va a recibir cómo? ¿Como una cadena de texto o como una cadena de html?

En cuanto a los hilos en los que se comenta Perl con PHP: viewtopic.php?t=2093&highlight=php
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ryo_Akiyama » 2008-07-13 14:31 @647

Imprimir por pantalla me refiero a la página web.

PHP ejecuta:
Código: Seleccionar todo
exec ($comando, $salida, $return)
donde
Código: Seleccionar todo
$comando="perl ../cgi-bin/clasifica_texto.pl $queja"


Esa página PHP imprime varias líneas, entre ellas el resultado del print del programa en Perl.

Asimismo si imprimo (siempre desde PHP) $salida me muestra la salida del programa (lo que sería la salida estándar, solo que al ejecutar PHP el programa lo muestra en la página web).
Ryo_Akiyama
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-07-13 11:29 @520

Notapor explorer » 2008-07-13 17:05 @753

Prueba a poner la línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use CGI::Carp qw(fatalsToBrowser);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
después de la del 'use CGI;'. Así, si se trata de un error, lo intentará sacar por la pantalla.

Aunque solo funcionará si la salida estándar y la salida de error estándar están bien redirigidos al exec() del PHP.

En la lista que te mando recomiendan usar passthru().

Otra cosa recomendable sería poner el camino al programa Perl en modo absoluto, no relativo (quitar los '..' del path).

También puedes probar a ir poniendo un 'use' cada vez y así saber cuál es el causante del fallo.

Otra cosa: cambia el último print del programa Perl con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "[$cadena]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Así estarás seguro de qué es lo que devuelve.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 31 invitados