Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Cambiar un CGI de Linux para Windows Responder al tema
Nuevo tema


Página 1 de 2  [ 17 mensajes ]  Ir a página 1, 2  Siguiente
 
Nota 2006-07-11 14:09 @631

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
Cambiar un CGI de Linux para Windows
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


Nota 2006-07-11 14:24 @642
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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...


Nota 2006-07-11 14:50 @660

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
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);
}


Nota 2006-07-11 14:55 @663
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Respuesta rápida: el problema es sendmail... seguro que en Windows no lo tienen instalado... pero hay otras formas...


Nota 2006-07-11 14:59 @666

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
Talvez tenga que preuntar al servidor que alternativa tengo a sendmail...?


Nota 2006-07-11 15:04 @669
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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...


Nota 2006-07-11 15:06 @671
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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.


Nota 2006-07-11 15:20 @680

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
Siguiendo un link de vuestra seccion herramientas he encontrado ente enlace:

http://www.microsoft.com/technet/archiv ... x?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"...


Nota 2006-07-11 16:06 @712
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
'Eso' no es Perl... es PHP... :-)


Nota 2006-07-11 16:22 @724

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
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


Nota 2006-07-11 16:47 @741
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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.


Nota 2006-07-12 16:03 @710

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
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.


Nota 2006-07-12 16:14 @718
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
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.


Nota 2006-07-12 16:50 @743

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
Eso es lo que hare.

nos vemos....


Nota 2006-07-13 04:25 @226

Perlero Nuevo
Registrado: 2006-07-11 13:50 @618
Mensajes: 9
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


Responder al tema  [ 17 mensajes ]  Ir a página 1, 2  Siguiente

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO