Perl en Español

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

Cambiar un CGI de Linux para Windows
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI
Mensaje Mar Jul 11, 2006 1:09 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Cambiar un CGI de Linux para Windows Responder citando

Tengo que decir que hasta hoy nunca habia tratado con un script CGI. No llego ni a novato.
Tengo una web en un servidor Windows. Quería probar un pequeño catálogo que encontré por internet, hecho en flash y asociado al archivo "orderform.cgi".
He consultado a mi servidor y me ha dicho que este CGI es para Linux y que no funcionará bajo Windows.
Mi pregunta es, ¿cómo puedo "traducirlo" para que funcione en mi servidor? (si es que eso fuera posible).
He buscado en el foro y en otros sites y no he encontrado nada parecio o no me he "enterado".

Probalemente a más de uno le de la risa al leer esta pregunta...

Gracias
Mensaje Mar Jul 11, 2006 1:24 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

La pregunta es seria, no te preocupes...

Generalmente, para pasar un script de Linux a Windows, es necesario hacer unos cambios. El más frecuente es cambiar los '\' de Windows a los de '/' de Linux en los paths de los ficheros y directorios.

Si puedes publicar el cgi, podremos darte más pistas...
Mensaje Mar Jul 11, 2006 1:50 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

Pues no es este "orderform".

Aqui esta:
Código:
#!/usr/bin/perl

####Most likely you will not have to change the above line. Check with host for path to Perl.

$SENDMAIL = '/usr/sbin/sendmail'; ####Path to sendmail (try this but yours may be different, check with your host)
$to       = 'you@yourdomain.com'; ####Target email address for orders
$subject  = 'MERCHANT ORDER';     ####E-MAIL subject

print "Content-type: text/html\n\n";
&get_date;
%FORM;
&get_arg;
&send_email;
print "&error=sent the email successfully";
exit();

sub get_date
{
      @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
      @months = ('Janurary','February','March','April','May','June','July','August','September','October','November','December');
      ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
      if ($hour < 10) { $hour = "0$hour"; }
      if ($min < 10)    { $min = "0$min"; }
      if ($sec < 10)    { $sec = "0$sec"; }
      if ($year < 10)   { $year = "0$year"; }
    if ($year < 90)   { $cent = "20"; }
   else { $cent = "19"; }
      $date = "$days[$wday], $months[$mon] $mday, $cent$year at $hour\:$min\:$sec";
}

sub get_arg{
   if ($ENV{'REQUEST_METHOD'} eq 'POST') {
            read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
            @pairs = split(/&/, $buffer);
      }else {
         print "error=wrong method";
      exit;
      }
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);
      $name =~ tr/+/ /;
      $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ s/<!--(.|\n)*-->//g;
      $FORM{$name} = $value;
   }
}


############### Order format below ... You may want to customize.

sub send_email{
   $from_name=($FORM{'name'} . " <" . $FORM{'email'} . "> ");
   open(MAIL,"|$SENDMAIL -t") || die "error=Can't open $mailprog!\n";
   print MAIL "To: $to\r\n";
      print MAIL "From: $from_name\r\n";
   print MAIL "Reply-To: $from_name\r\n";
   print MAIL "Subject: $subject\r\n\n"; 
   print MAIL "---------------------------------------------------------------\n\n";
   print MAIL "   ORDER SUBMITTED BY: \n";
   print MAIL "   $FORM{'name'} on $date\n\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "MERCHANDISE ORDER\n";
   print MAIL "---------------------------------------------------------------\n\n";
   print MAIL " $FORM{'comments'}\n\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "CARD INFORMATION\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "TYPE : $FORM{'cardtype'}\n";
   print MAIL "NAME ON CARD : $FORM{'cardname'}\n";
   print MAIL "CARD NUMBER : $FORM{'cardnum'}\n";
   print MAIL "CARD EXPIRATION : $FORM{'cardexp'}\n\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "BILLING INFO\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "FIRST NAME : $FORM{'bfirstname'}\n";
   print MAIL "LAST NAME : $FORM{'blastname'}\n";
   print MAIL "EMAIL : $FORM{'bemail'}\n";
   print MAIL "ADDRESS : $FORM{'baddress'}\n";
   print MAIL "CITY : $FORM{'bcity'}\n";
   print MAIL "STATE : $FORM{'bstate'}\n";
   print MAIL "ZIP : $FORM{'bzip'}\n";
   print MAIL "PHONE : $FORM{'bphone'}\n";
   print MAIL "COMMENTS : $FORM{'bcomments'}\n\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "SHIPPING INFO\n";
   print MAIL "---------------------------------------------------------------\n";
   print MAIL "NAME : $FORM{'sname'}\n";
   print MAIL "ADDRESS : $FORM{'saddress'}\n";
   print MAIL "CITY : $FORM{'scity'}\n";
   print MAIL "STATE : $FORM{'sstate'}\n";
   print MAIL "ZIP : $FORM{'szip'}\n\n";
   print MAIL "---------------------------------------------------------------\n\n";
   print MAIL "<REMOTE HOST>     $ENV{'REMOTE_HOST'}\n";
   print MAIL "<REMOTE ADDRESS>  $ENV{'REMOTE_ADDR'}\n";
   print MAIL "<USER AGENT>      $ENV{'HTTP_USER_AGENT'}\r\n";
   close(MAIL);
}
Mensaje Mar Jul 11, 2006 1:55 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Respuesta rápida: el problema es sendmail... seguro que en Windows no lo tienen instalado... pero hay otras formas...
Mensaje Mar Jul 11, 2006 1:59 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

Talvez tenga que preuntar al servidor que alternativa tengo a sendmail...?
Mensaje Mar Jul 11, 2006 2:04 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

En este foro hay algunos hilos comentando el mismo problema...

Yo les preguntaría primero qué Perl tienen instalado y qué módulos relacionados con el envío de correo tienen. Si no tienen ninguno aún así se puede hacer, pero con un poco de trabajo.

Pregúntales si pueden instalar los módulos que necesites...
Mensaje Mar Jul 11, 2006 2:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Estoy mirando el script... porque me parece que se puede hacer algo interesante...

Lo importante es que les preguntes si pueden instalarte alguno de los módulos de correo, por ejemplo Mail::Sendmail.
Mensaje Mar Jul 11, 2006 2:20 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

Siguiendo un link de vuestra seccion herramientas he encontrado ente enlace:

http://www.microsoft.com/technet/archive/interopmigration/linux/mvc/miglamp.mspx?mfr=true

Aqui hay un ejemplo de una alternativa a sendmail:

<?
$message = new COM("CDO.Message");
$message->To = 'receiver@somplace.com';
$message->From = 'Sender@MyCompany.com';
$message->Subject = "This is a subject line";
$message->HTMLBody = "<html><body>This is <b>the</b> body!</body></html>";
$message->AddAttachment('http://www.ActiveState.com');
$message->Send();
?>

Intentare ver como puedo adaptar este ejemplo al "orderfom.cgi"...
Mensaje Mar Jul 11, 2006 3:06 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

'Eso' no es Perl... es PHP... Smile
Mensaje Mar Jul 11, 2006 3:22 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

creo que por hoy voy a dejarlo...
Mañana sera otro dia, y les consultare al servidor si pueden instalarme el modulo que has comentado Mail::Sendmail.

muchas gracias por echarme una mano

Hasta mañana
Mensaje Mar Jul 11, 2006 3:47 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Lo he reducido a estas 100 líneas y me funciona...
Código:
#!/usr/bin/perl
use CGI qw':standard :cgi-lib';
use POSIX 'strftime';
use Mail::Sendmail;
use strict;

#### Configuracion
my $to      = 'destinatario@tudominio.net'; #### Destinatario del correo
my $subject = 'MERCHANT ORDER';             #### E-MAIL asunto
my $smtp    = 'correo.tudominio.net';       #### Servidor de correo
#### Fin configuracion

#### Inicializacion
my %FORM;
$FORM{$_} = '' foreach qw(
    name email
    comments
    cardtype cardname cardnum cardexp
    bfirstname blastname bemail baddress bcity bstate bzip bphone bcomments
    sname saddress scity sstate szip
);

#### Programa
print header('header/html');                #### Cabecera
if ( $ENV{'REQUEST_METHOD'} ne 'POST' ) {
    print "error=wrong method";
    exit;
}

#### Leer los parámetros pasados por el cliente
%FORM = Vars();

#### Componer el mensaje
my $date = strftime "%a, %B %e, %Y a las %H:%M:%S", localtime;
my $mensaje = <<"MENSAJE";
---------------------------------------------------------------
   ORDER SUBMITTED BY:
   $FORM{name} on $date
---------------------------------------------------------------

MERCHANDISE ORDER
---------------------------------------------------------------

 $FORM{comments}

---------------------------------------------------------------
CARD INFORMATION
---------------------------------------------------------------
TYPE : $FORM{cardtype}
NAME ON CARD : $FORM{cardname}
CARD NUMBER : $FORM{cardnum}
CARD EXPIRATION : $FORM{cardexp}

---------------------------------------------------------------
BILLING INFO
---------------------------------------------------------------
FIRST NAME : $FORM{bfirstname}
LAST NAME : $FORM{blastname}
EMAIL : $FORM{bemail}
ADDRESS : $FORM{baddress}
CITY : $FORM{bcity}
STATE : $FORM{bstate}
ZIP : $FORM{bzip}
PHONE : $FORM{bphone}
COMMENTS : $FORM{bcomments}

---------------------------------------------------------------
SHIPPING INFO
---------------------------------------------------------------
NAME : $FORM{sname}
ADDRESS : $FORM{saddress}
CITY : $FORM{scity}
STATE : $FORM{sstate}
ZIP : $FORM{szip}

---------------------------------------------------------------

<REMOTE HOST>     $ENV{REMOTE_HOST}
<REMOTE ADDRESS>  $ENV{REMOTE_ADDR}
<USER AGENT>      $ENV{HTTP_USER_AGENT}
MENSAJE

#### Enviar el correo
my $from_name = "$FORM{name} <$FORM{email}>";
my %mail = (
    smtp        => $smtp,
    From        => $from_name,
    'Reply-To'  => $from_name,
    To          => $to,
    Subject     => $subject,
    Message     => $mensaje,
);
sendmail(%mail) or die $Mail::Sendmail::error;

#### Fin
print '&error=sent the email successfully';
exit;
El único problema para ti es que instalen el Mail::Sendmail, porque los otros dos, CGI y POSIX pertenecen al nucleo de Perl.
Mensaje Mie Jul 12, 2006 3:03 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

Esta mañana me he encontrado con este script modificado ( gracias "explorer" por tu tiempo ), lo he mandado al sevidor junto com la peticion de instalacion del modulo que me recomendaste.
La respuesta del servidor ha sido que no funcionaria ya que utilizaba Sendmail, les he contestado que creia que no era lo mismo Sendmail que mail::Sendmail i que si podian aclararme el asunto.
De momento sigo esperando respuesta.
Mensaje Mie Jul 12, 2006 3:14 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Pues no, no utiliza sendmail, sino que hace la conexión socket directamente.
Y si no quieren instalar el Mail::Sendmail, que prueben con este otro: MIME::Lite.
Mensaje Mie Jul 12, 2006 3:50 pm
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

Eso es lo que hare.

nos vemos....
Mensaje Jue Jul 13, 2006 3:25 am
paniks
Perlero Nuevo
Perlero Nuevo
Registrado: 11 Jul 2006
Mensajes: 9
Responder citando

La respuesta definitiva que me han dado desde el servidor es que el unico modulo que tienen instalado es el AspMail.

Intentare pasar las variables con asp, a ver si lo consigo...

Gracias de nuevo
Publicar nuevo tema   Responder al tema    Foros de discusión -> CGI Todas las horas son GMT - 6 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2



Powered by phpBB © 2001, 2005 phpBB Group