Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ejecutar un bat en el servidor

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Vie Jun 22, 2007 1:02 pm
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Ejecutar un bat en el servidor Responder citando

Hola a todos. Agradeceré mucho la ayuda de algún gurú. Tengo el siguiente código:

Perl:
#!C:\perl\bin\perl.exe -w 
use CGI qw(:standard);
print redirect( 'http://localhost/Auco/atavancese.php' );
sub inspeccionar_datos
 {
   local (*FORM_DATA) = @_;
   local ( $request_method, $query_string, @key_value_pairs,
               $key_value, $key, $value);
  $request_method = $ENV{'REQUEST_METHOD'};
    if ($request_method eq "GET") { 
        $query_string = $ENV{'QUERY_STRING'};
    } elsif ($request_method eq "POST") {
        read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
   } else {
        &return_error (500, "Server Error",
                            " No es posible utilizar ese metodo");
   }
 
   @key_value_pairs = split (/&/, $query_string);
   foreach $key_value (@key_value_pairs) {
       ($key, $value) = split (/=/, $key_value);
        $value =~ tr/+/ /;
        $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
     if (defined($FORM_DATA{$key})) {
           $FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value);
       } else {
           $FORM_DATA{$key} = $value;
       }
   }
}#!/usr/local/perl
&inspeccionar_datos (*fcalen);
$conciliacion = $fcalen{'conciliacion'};
$fecha1 = $fcalen{'fecha1'};
$fecha2 = $fcalen{'fecha2'};
$promedio = $fcalen{'promedio'};
$fecha3 = $fcalen{'fecha3'};
$fecha4 = $fcalen{'fecha4'};
$cmd = "prueba.bat $conciliacion $fecha1 $fecha2 $promedio $fecha3 $fecha4";
system($cmd);
exit(1);


Se supone que lo que hace es enviar las variables de un formulario de PHP a un pequeño BAT que ejecuta un programa desarrollado en Visual Dataflex el cual llena una base temporal.

Por favor, alguien que me diga por qué no funciona o en que la estoy regando.

Muchas gracias por su ayuda.
Mensaje Vie Jun 22, 2007 5:04 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

A ver si lo entiendo...

* Es un CGI, porque veo que usas el módulo CGI
* Lo primero que hace el CGI es mandar una redirección al cliente web a otra página PHP
* Se define una función llamada inspeccionar_datos() que lo que hace es recibir los parámetros pasados por la página que llama al CGI, tanto por el método GET como con el POST. Curioso, cuando se está usando ya el módulo CGI que nos ahorra todo este rollo
* Luego se llama a la función pasándole como parámetro el símbolo *fcalen, es decir, la función va a leer los parámetros pasados por la página que hace la petición al CGI y los va a guardar en un hash %fcalen
* Luego lee los valores almacenados en las claves 'conciliacion', 'fecha1', 'fecha2', 'promedio', 'fecha3', y 'fecha4', que se suponen son los campos de un formulario que estaba en la página o han sido pasados en el URL de la petición
* Luego asignas un string a la variable $cmd
* Ejecutas el string con system()
* Terminas

El fallo que puedo ver es que quizás prueba.dat no está en el PATH del usuario que ejecuta el servidor web. Prueba a poner el camino completo delante de prueba.bat.
Mensaje Lun Jun 25, 2007 9:17 am
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Gracias Responder citando

Antes que nada gracias por tomarse el tiempo de responder.

Efectivamente si lleva el path C:/prueba.bat perdon por no incluirlo, pero cuando ejecuto mi pagina se escucha una campana de error de windows pero no se visualiza ningun error y no corre el bat mas sin en embargo si me meto a ms-dos y ejecuto prueba.bat lo hace sin problemas.

Nuevamente gracias
Mensaje Lun Jun 25, 2007 9:36 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

¿C:/prueba.bat?

¿No será C:\\prueba.bat?

Yo no trabajo en Windows por razones obvias, pero juraría que para ejecutar un fichero bat... quizás haya que hacerlo a través del cmd.exe, con lo que entonces el system debería ejecutar: cmd.exe c:\\prueba.bat .
Mensaje Lun Jun 25, 2007 11:28 am
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Responder citando

Crying or Very sad lo intenté así como usted me dijo pero nada, de hecho me manda en un PHP nuevo lo que trae el bat pero no lo ejecuta en el servidor.

Ejemplo:
Si quiero correr la calculadora en el servidor se supone que debería de funcionar con:

Código:
$cmd = "C:\\calc.bat";
system($cmd);


donde el bat sería:
Código:
c:
calc.exe (suponiendo que este archivo se encuentra dentro de c:)

pero no abre la calculadora, sino que abre una página nueva:

Código:
C:\wamp\www\Auco>c: C:\wamp\www\Auco>calc.exe


y el medidor de progreso avanza muy lento y nunca abre la calculadora en el servidor.

¡¡¡¡¡¡¡¡¡ Auxilio por favor !!!!!!!!!!!
Mensaje Lun Jun 25, 2007 3:24 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

¿No hay ningún mensaje extraño en los ficheros de actividad (.log) del servidor web?
Mensaje Lun Jun 25, 2007 3:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4034
Ubicación: Valladolid, España
Responder citando

¿Con qué navegador estás intentando arrancar el bat? Si es con el explorer, quizás las políticas de seguridad de Windows lo están impidiendo.
Mensaje Mar Jun 26, 2007 8:54 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1366
Ubicación: México
Responder citando

Hola:

Yo trabajo sobre Windows y a mi me jala sin ningún problema. Por ejemplo, intenta con el siguiente código:

Perl:
chdir("C:\\windows");
system("calc.exe");


Tanto en el command line como en mi navegador, se abrió el programa de la calculadora de Windows sin ningún problema.

Saludos
Mensaje Mar Jun 26, 2007 8:55 am
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Responder citando

Les agradezco mucho explorer y kidd voy a probar todos sus consejos y en cuanto jale la aplicacion yo se los hare saber son ustedes muy amables Very Happy
Mensaje Mie Jun 27, 2007 11:12 am
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Pregunta para kidd Responder citando

disculpe en mi archivo de perl solo pongo esas dos lineas o que mas lleva
Mensaje Mie Jun 27, 2007 2:34 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1366
Ubicación: México
Responder citando

Hola:

Dependiendo de la ruta de tu perl, pero como primera línea siempre debes de poner el llamado shebang:
Perl:
#!C:/perl/perl.exe


Saludos
Mensaje Mie Jun 27, 2007 4:25 pm
spiderguguin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Jun 2007
Mensajes: 6
Responder citando

hola:

entonces queda así:

Perl:
#!C:\perl\bin\perl.exe -w
chdir("C:\\windows");
system("calc.exe");
exit(1);


Pero no me abre nada.

Perdón tanta insistencia.
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group