Mar Jul 11, 2006 1:09 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
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 |
|
|
|

Mar Jul 11, 2006 1:24 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|

Mar Jul 11, 2006 1:50 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
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);
} |
|
|

Mar Jul 11, 2006 1:55 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
| Respuesta rápida: el problema es sendmail... seguro que en Windows no lo tienen instalado... pero hay otras formas... |
|
Mar Jul 11, 2006 1:59 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
Mensajes: 9
|
|
|
|
|
| Talvez tenga que preuntar al servidor que alternativa tengo a sendmail...? |
|
Mar Jul 11, 2006 2:04 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|
Mar Jul 11, 2006 2:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Mar Jul 11, 2006 2:20 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
Mensajes: 9
|
|
|
|
|
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"... |
|
Mar Jul 11, 2006 3:06 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
'Eso' no es Perl... es PHP...  |
|
Mar Jul 11, 2006 3:22 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
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 |
|

Mar Jul 11, 2006 3:47 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Mie Jul 12, 2006 3:03 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
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. |
|
Mie Jul 12, 2006 3:14 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Mie Jul 12, 2006 3:50 pm
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
Mensajes: 9
|
|
|
|
|
Eso es lo que hare.
nos vemos.... |
|
Jue Jul 13, 2006 3:25 am
|
 |
paniks
Perlero Nuevo

|
Registrado: 11 Jul 2006
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 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|