• Publicidad

Problema con Apache - LAMPP al ejecutar cgi

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Problema con Apache - LAMPP al ejecutar cgi

Notapor pianistman2006 » 2009-05-26 12:26 @560

Hola. Primero que nada un agradecimiento al foro que me ha ayudado mucho en mis trabajos y desarrollos.
GRACIAS.

Estoy desarrollando un control en la PC para el puerto paralelo. Utilizando Perl voy a sacar datos por el puerto paralelo. Estoy usando los siguientes módulos:

Time::HiRes para temporizadores,
ParallelPort:: utilizando el driver ::ParallelPort::drv::linux para Linux.

Este proyecto lo desarrollé utilizando Windows Apache + Perl. Ahora lo quiero utilizar en Ubuntu Server. Al correr el script para sacar todos los datos me manda el error 500.

Revisé el log y aparece esto:
Código: Seleccionar todo
[Tue May 26 12:21:07 2009] [error] [client 127.0.0.1] (2)No existe el fichero \xc3\xb3 directorio: exec of '/opt/lampp/cgi-bin/conectatodo.cgi' failed

[Tue May 26 12:21:07 2009] [error] [client 127.0.0.1] Premature end of script headers: conectatodo.cgi


El \xc3\xb3 es por que principia un carácter UTF8, ¿no?

El código es el siguiente: conectatodo.cgi
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl -w
        print "content-type: text/html\n\n";

        use integer;
        use CGI ':standard';   
        use Device::ParallelPort;
        use Device::ParallelPort::drv::linux;      

        my $port = Device::ParallelPort->new( );  


#Llamada a librería de subrutinas

        require 'entorno2.lib';


#LLama a la subrutina "registro" para enviar el dato al octeto.

        registro(0,255);
        registro(2,15);

exit(1);
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


La librería entorno2 es la siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Time::HiRes qw( usleep );
use Device::ParallelPort;
use Device::ParallelPort::drv::linux;

my $port = Device::ParallelPort->new();
my $dato1;

#Zona de subrutinas    

#Subrutinas para salidas

#$_[0],$_[1],$_[2], etc.. son los argumentos para pasar parámetros a las Subrutinas

sub registro {
        $port->set_byte ($_[0], chr($_[1]));
}              

sub conecta {  
        $port->set_bit($_[0],1);   # $_[0] es el argumento de entrada para la subritina. En este caso es el número de bit de la salida de la contorladora.

         print "<p>Salida <b>$_[0] On</b>\n";
}

sub apaga {    
        $port->set_bit($_[0],0);

        print "<p>Salida <b>$_[0] Off</b>\n";

}              

sub apagatodo {
        $port->set_byte (0, chr(0));

        $port->set_byte (2, chr(0));
}      

sub enciendetodo {     
        $port->set_byte (0, chr(255));
}      

#Si se pulsa la entrada1, escribe Off en el archivo
sub in1_0ff{
        if ($entrada1==0) {
                $dato1=Off;
                open (BANDERA1, ">bandera1.txt");
                print BANDERA1 $dato1;
                close BANDERA1;
        }
}              

#Si se pulsa la entrada2, escribe Off en el archivo            
sub in2_0ff{
        if ($entrada2==0) {
                $dato2=Off;
                open (BANDERA2, ">bandera2.txt");
                print BANDERA2 $dato2;
                close BANDERA2;
        }
}      

#Si se pulsa la entrada2, escribe Off en el archivo
sub in3_0ff{
        if ($entrada2==0){
                $dato3=Off;
                open (BANDERA3, ">bandera3.txt");
                print BANDERA3 $dato3;
                close BANDERA3;
        }
}      

#Subrutina para entradas
sub entradas {
        $entrada1=$port->get_bit(11); #Carga el valor de la primera entrada en la variable
        $entrada2=$port->get_bit(12); #Carga el valor de la segunda entrada en la variable
        $entrada3=$port->get_bit(13);
        $entrada4=$port->get_bit(14);
        $entrada5=$port->get_bit(15);
}

1;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


De antemano, gracias, y espero puedan ayudarme, porque no doy nada más con el error.
:D Saludos desde Mexico , San Luis Potosi
pianistman2006
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2009-05-26 12:13 @550

Publicidad

Notapor explorer » 2009-05-26 15:00 @667

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

Los caracteres "\xc3\xb3" corresponden, en utf8, al carácter 'ó'. Pero no lo veo en tu programa.

Asegúrate de que la primera línea del programa es la del shebang y solo eso. Para asegurarte, borra toda la línea, inserta una nueva, con el contenido
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#/usr/bin/perl -w
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que además, fíjate que he pongo que el intérprete perl está dentro de /usr/bin, no dentro de /bin, como pones tu. Comprueba en tu sistema dónde tienes el intérprete. Si es Ubuntu, lo más seguro es que esté en /usr/bin. Con el comando which perl también lo puedes averiguar.

Un detalle sobre CGI: no necesitas ejecutar el print de la cabecera "a mano". Ya que estás usando el módulo CGI, lo puedes dejar así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use CGI ':standard';
use Device::ParallelPort;
use Device::ParallelPort::drv::linux;
use integer;

my $port = Device::ParallelPort->new( );

require 'entorno2.lib';

print header();   # Cabecera HTTP de respuesta

registro(0,255);
registro(2,15);

exit 1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sustituimos el print "Content-Type..." por print header(); También he cambiado la posición de 'integer', porque podría afectar a la carga de los 'use' que le siguen. Por eso lo pongo al final.

Te aconsejo el use del módulo CGI::Carp, como puedes ver en mi CGI mínimo, ya que te mostrará los errores en la página del navegador.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Web

¿Quién está conectado?

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