From emhn at telcel.net.ve Fri Jun 23 12:52:05 2000 From: emhn at telcel.net.ve (Ernesto Hernández-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: Aumentan la membresía Message-ID: <00062313535402.08793@freakazoid> Al mediodída de hoy 23 de junio, tenemos 14 subscriptores en la lista. :-) He deshabilitado la posibilidad de que los miembros de la lista ejecuten "who" o "which", básicamente porque no les hace falta y es una forma de protegernos de spammers que se suscriban para obtener nuestros e-mails :-) Adicionalmente he agregado las instrucciones en la cola de los mensajes para facilitar la desubscripción para aquellos que no acostumbran usar Majordomo. -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From emhn at telcel.net.ve Sat Jun 24 18:02:47 2000 From: emhn at telcel.net.ve (emhn@telcel.net.ve) Date: Wed Aug 4 23:59:16 2004 Subject: [P]El pid de un proceso hijo [Aun más Largo] References: <00062411095300.05674@draco> Message-ID: <00062419493007.32649@asterix> On Sat, 24 Jun 2000, L. Alejandro Bernal R. wrote: >Buena realmente lo que estoy haciendo es un CGI que permite a un estudiante >enviar un programa en C para ser calificado por su profesor, pero antes de que >le llegue al profesor este pasa por una serie de flitros, el primero es el >compilador, el segundo son una serie de pruebas de caja negra que son preparadas >por el profesor y es hay donde esta el problema, pues un estudiante puede >enviar un programa que puede quedar en un cliclo infinito. Simplificando el >problema un minimo de codigo, el problema se puede resumir de la siguiente >forma: Interesante problema pero (en mi opinión), muy impráctico de atacar con C, sobre todo si se trata de un CGI. Por cierto, copio a caracas-pm-list@pm.org porque estoy seguro que les interesa ;-) Perl es _el_ lenguaje por excelencia para escribir CGIs, y en tu caso particular combina todas las herramientas necesarias para interactuar con procesos externos y hacer la evaluación. Me voy a permitir plantearte una solución alternativa utilizando Perl (pero no voy a hacer la parte CGI :-). Tenemos inicialmente el programa suma.pl. Es un programa muy simple que lee números desde la entrada standard y emite su suma una vez que la ha consumido. Para simular la posibilidad de que el programa se quede "colgado", si el número a sumar es 42, entonces se queda en un ciclo infinito. Este es el programa: #!/usr/bin/perl while (<>) { $sum += $_; 1 while ($_ == 42); # Por qué 42? Porque es la respuesta a todo ;-) } print $sum,"\n"; Muy simple y cumple con tus requisitos: recibe sus datos por la entrada standard, emite sus resultados por la salida standard y puede quedarse "colgado" en algún momento. ¿Cómo hará el profesor para "probar" el programa? Primero ha de escribir las pruebas de "caja negra" en un archivo de texto. Yo lo llamaré "examen.txt" y tiene un formato muy sencillo: cada línea tiene un nombre para el caso, el resultado esperado y los datos que deben suministrarse al programa, todo separado con comas y longitud variable. Para nuestro ejemplo, uso lo siguiente: Primer Caso, 10, 1, 2, 3, 4 Otro mas, 6, 1, 2, 3 Esto es para que falle a proposito, 3, 2, 2 Seguimos probando, 16, 7, 5, 4, -5, 5 Este se cuelga, 64, 2, 42, 10, 8, 2 Nunca llegara, 666, 111, 222, 333, 999, -888, -111 Nótese que tengo un ejemplo para que falle a propósito (es más fácil que modificar suma.pl para que lo haga :-). Dado que el profesor probablemente querrá que el programa califique automáticamente y de forma manejable, definiré que el resultado de la evaluación sea un archivo cuyos contenidos serán: el nombre del caso y la cadena "Ok", "Falla" o "Excedido en tiempo" según sea conveniente. Este archivo lo he llamado "calificacion.txt" en el programa evaluador. Ahora el jugoso programa de evaluación testing.pl. El programa adjunto no es parametrizable (pero se deja como ejercicio para el lector), ni hace labor CGI (pero el módulo CGI de Perl será suficiente). Básicamente combina los conceptos que presentaste en C, pero de una manera más clara y limpia. Por cierto, el programa puede escribirse para que sea mucho más breve y eficiente, pero eso oscurecería un poco la lógica. Aquí va: #!/usr/bin/perl use IPC::Open2; # open2, permite abrir _dos_ pipes contra un mismo proceso my $limite = 5; # Cada prueba se destruirá en 5 segundos my $programa = "./suma.pl"; # Programa a probar open(E,"examen.txt"); # De aquí leeremos los casos de prueba open(C,">calificacion.txt"); # Aquí escribiré los resultados # Vamos a usar una señal de alarma SIGALRM igual que en tu ejemplo en C # (pero esto es _mucho_ más conciso :-) $SIG{ALRM} = sub { die "timeout" }; # Si llega la alarma genero una # excepcion que dice "timeout" while () { # Leemos el siguiente caso de prueba chomp; # Fuera el \n al final de la línea ($caso,$esperado,@argumentos) = split /,/; # Quito las "," y asigno. eval { # Ejecutar y _salvar_ excepciones ;-) alarm($limite); # Tiene $limite segundos para responder open2(*RESULTADOS,*PARAMETROS,$programa) # Magia negra explicada abajo foreach $a (@argumentos) { # Para cada argumento... print PARAMETROS "$a\n"; # ... enviarlo al STDIN del programa } close(PARAMETROS); # El programa hijo corre (*). $resultado = ; # Leo la línea resultado. chomp($resultado); # Le quito el \n close(RESULTADOS); # Termino de leer, muere el programa hijo. if ($resultado == $esperado) { print C "$caso, Ok\n"; # Coinciden los resultados } else { print C "$caso, Falla\n"; # Error en el programa de prueba } alarm(0); # Deshabilito la alarma }; if ($@) { # Ocurrió alguna excepción? if ($@ =~ /timeout/) { # Se excedió en tiempo print C "$caso, Excedido en tiempo\n"; # Indicar el evento close(PARAMETROS); # Estos archivos aún están abiertos, así close(RESULTADOS); # que los cierro (el programa hijo morirá) } else { # Ocurrió otro error alarm(0); # Deshabilito la alarma die; # Muero indicando el error } } # Si no hubo excepciones, el while continua al siguiente caso de prueba } close(E); # Cerramos todo porque hemos terminado close(C); Eso es to, eso es to, eso es todo amigos! La magia negra del open2 vale todo el programa: open2 ejecuta el programa hijo y abre dos pipes, uno para escribir conectado a la entrada standard del hijo y otro para leer conectado a la salida standard del hijo. Si se cierran ambos pipes, el hijo sabe que debe terminar. La "extraña" notación *F quiere decir que la rutina open2 debe _asociar_ los pipes físicos a los nombres indicados con asterisco (se llama un typeglob en la jerga Perl). Anexo los programas y archivos de ejemplo sin comentarios para que no tengan que escribirlos :-) Nótese que el programa hijo realmente comienza a correr una vez que ha recibido _toda_ su entrada standard (la línea marcada con (*)); si la alarma se dispara antes de terminar, salta directo a la rutina que genera la excepción, el "eval" se interrumpe y se detecta inmediatamente. Perl hace obsoletos todos los lenguajes modernos, es postmodernista :-) -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- -------------- next part -------------- A non-text attachment was scrubbed... Name: hack.tar.gz Type: application/x-gzip Size: 801 bytes Desc: not available Url : http://mail.pm.org/archives/caracas-pm/attachments/20000624/2df01a82/hack.tar.bin From emhn at telcel.net.ve Sun Jun 25 10:32:04 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: [P]El pid de un proceso hijo [Aun más Largo] [ERRATA] References: <00062419493007.32649@asterix> Message-ID: <00062511353803.06445@asterix> Hay un error en el programa testing.pl que permite que los programas hijos colgados queden corriendo. Para corregirlo, primero es necesario capturar el PID del proceso hijo, para eso > $pid = open2(*RESULTADOS,*PARAMETROS,$programa) # Magia negra explicada Luego, en la rutina que maneja la excepción del timeout, enviar el kill -9 al proceso hijo puesto que excedió el tiempo de ejecución, para eso > if ($@) { # Ocurrió alguna excepción? > if ($@ =~ /timeout/) { # Se excedió en tiempo > print C "$caso, Excedido en tiempo\n"; # Indicar el evento > close(PARAMETROS); # Estos archivos aún están abiertos, así > close(RESULTADOS); # que los cierro (el programa hijo morirá) > kill(9,$pid); -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From ahernand at cantv.net Sun Jun 25 11:02:37 2000 From: ahernand at cantv.net (=?iso-8859-1?Q?Alvaro_Hern=E1ndez?=) Date: Wed Aug 4 23:59:16 2004 Subject: =?iso-8859-1?Q?Presentaci=F3n?= Message-ID: <009701bfdebe$d2f83e60$0300000a@ghmultimedia.ve> Saludos, me da gusto saber que existe esta lista y espero colaborar y aprender de sus miembros, tengo un conocimiento MEDIO de perl, espero poder ense?ar algo con estos. Atentamente. Alvaro Hern?ndez (Valencia-Venezuela) Para suspender la suscripci?n a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From vdaniel at trompo.com Mon Jun 26 01:04:14 2000 From: vdaniel at trompo.com (Daniel van Balen) Date: Wed Aug 4 23:59:16 2004 Subject: =?iso-8859-1?Q?=5BP=5DEl_pid_de_un_proceso_hijo_=5BAun_m=E1s_Largo=5D?= In-Reply-To: <00062419493007.32649@asterix>; from emhn@telcel.net.ve on Sat, Jun 24, 2000 at 07:02:47PM -0400 References: <00062411095300.05674@draco> <00062419493007.32649@asterix> Message-ID: <20000626100414.A22972@vdaniel> On Sat, Jun 24, 2000 at 07:02:47PM -0400, emhn@telcel.net.ve wrote: > On Sat, 24 Jun 2000, L. Alejandro Bernal R. wrote: > >Buena realmente lo que estoy haciendo es un CGI que permite a un estudiante > >enviar un programa en C para ser calificado por su profesor, pero antes de que > >le llegue al profesor este pasa por una serie de flitros, el primero es el > >compilador, el segundo son una serie de pruebas de caja negra que son preparadas > >por el profesor y es hay donde esta el problema, pues un estudiante puede En realidad hay otro problema: "La seguridad..." En resumen lo que ?ste CGI hace es permitir ejecutar un programa cualquiera como el usuario y en la m?quina donde corre el servidor web. Se debe tomar en cuenta cosas como: - ?Qui?n(es) tienen acceso de correr programas con el CGI? - Si solo los estudiantes del curso tienen acceso se deben analizar las consecuencias de darles acceso a correr cualquier programa en dicha m?quina y como el usuario que corre el servidor web. -spiff Para suspender la suscripci?n a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From gouveia at correiodecaracas.com Mon Jun 26 10:08:49 2000 From: gouveia at correiodecaracas.com (Felipe Gouveia - Correio de Caracas) Date: Wed Aug 4 23:59:16 2004 Subject: Presentación References: <009701bfdebe$d2f83e60$0300000a@ghmultimedia.ve> Message-ID: <007401bfdf80$714ddf40$559a48d8@administrador> Tengo un archivo en Perl que consegui en Internet, no recuerdo en donde, que permite subir un archivo a un site en Internet, pero que "escribe" en un directorio tmp ou usr/tmp El site en donde pienso "montar" el archivo fue alquilado a unos muchachos que estarán ausentes durante más dos semanas y tengo varios materiales urgentes que deben "subir" a mi site, usando ese archivo. Cuando intento subir el hace todo normalmente solo que el "log" del sistema indica que no puede escribir por falta de "permiso", que yo no tengo. Como aún no entiendo nada de Perl, pregunto si alguiém me puede ayudar a que direccione la escrita del archivo a otro directorio. Promete que en breve voy a estudiar. Todo es cuestión de tiempo. Si existen alternativas son bien venidas. Como propietario del site, puedo cambiar los atributos de cualquier directorio o archivo siempre que estén dentro de la carpeta htdocs o public_html. En otros casos solo atributos de archivos. Un abrazo Felipe Gouveia ARQUIVO DE PERL #!/usr/bin/perl #file: upload.pl use CGI qw/:standard/; print header, start_html('file upload'), h1('file upload'); print_form() unless param; print_results() if param; print end_html; sub print_form { print start_multipart_form(), filefield(-name=>'upload',-size=>60),br, submit(-label=>'Upload File'), end_form; } sub print_results { my $length; my $file = param('upload'); if (!$file) { print "No file uploaded."; return; } print h2('File name'),$file; print h2('File MIME type'), uploadInfo($file)->{'Content-Type'}; while (<$file>) { $length += length($_); } print h2('File length'),$length; } Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From gouveia at correiodecaracas.com Mon Jun 26 10:09:57 2000 From: gouveia at correiodecaracas.com (Felipe Gouveia - Correio de Caracas) Date: Wed Aug 4 23:59:16 2004 Subject: Problema en transferir archivos en Perl Message-ID: <008201bfdf80$98c94b40$559a48d8@administrador> Tengo un archivo en Perl que consegui en Internet, no recuerdo en donde, que permite subir un archivo a un site en Internet, pero que "escribe" en un directorio tmp ou usr/tmp El site en donde pienso "montar" el archivo fue alquilado a unos muchachos que estarán ausentes durante más dos semanas y tengo varios materiales urgentes que deben "subir" a mi site, usando ese archivo. Cuando intento subir el hace todo normalmente solo que el "log" del sistema indica que no puede escribir por falta de "permiso", que yo no tengo. Como aún no entiendo nada de Perl, pregunto si alguiém me puede ayudar a que direccione la escrita del archivo a otro directorio. Promete que en breve voy a estudiar. Todo es cuestión de tiempo. Si existen alternativas son bien venidas. Como propietario del site, puedo cambiar los atributos de cualquier directorio o archivo siempre que estén dentro de la carpeta htdocs o public_html. En otros casos solo atributos de archivos. Un abrazo Felipe Gouveia ARQUIVO DE PERL #!/usr/bin/perl #file: upload.pl use CGI qw/:standard/; print header, start_html('file upload'), h1('file upload'); print_form() unless param; print_results() if param; print end_html; sub print_form { print start_multipart_form(), filefield(-name=>'upload',-size=>60),br, submit(-label=>'Upload File'), end_form; } sub print_results { my $length; my $file = param('upload'); if (!$file) { print "No file uploaded."; return; } print h2('File name'),$file; print h2('File MIME type'), uploadInfo($file)->{'Content-Type'}; while (<$file>) { $length += length($_); } print h2('File length'),$length; } Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From emhn at telcel.net.ve Mon Jun 26 10:43:30 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: [P]El pid de un proceso hijo [Aun más Largo] References: <20000626100414.A22972@vdaniel> Message-ID: <00062611452300.11537@asterix> On Mon, 26 Jun 2000, Daniel van Balen wrote: >On Sat, Jun 24, 2000 at 07:02:47PM -0400, emhn@telcel.net.ve wrote: >> On Sat, 24 Jun 2000, L. Alejandro Bernal R. wrote: >> >Buena realmente lo que estoy haciendo es un CGI que permite a un estudiante >> >enviar un programa en C para ser calificado por su profesor, pero antes de que >> >le llegue al profesor este pasa por una serie de flitros, el primero es el >> >compilador, el segundo son una serie de pruebas de caja negra que son preparadas >> >por el profesor y es hay donde esta el problema, pues un estudiante puede > > En realidad hay otro problema: "La seguridad..." En resumen lo que éste >CGI hace es permitir ejecutar un programa cualquiera como el usuario y en la >máquina donde corre el servidor web. Se debe tomar en cuenta cosas como: > >- ¿Quién(es) tienen acceso de correr programas con el CGI? >- Si solo los estudiantes del curso tienen acceso se deben analizar las > consecuencias de darles acceso a correr cualquier programa en dicha máquina y > como el usuario que corre el servidor web. Estamos de acuerdo. Lo que perseguía era ilustrar la facilidad con la cual podía resolverse el problema usando Perl, puesto que la pregunta original ya tenía cola de por lo menos un mes. Los detalles de seguridad y privilegios son importantes, pero no eran el enfoque de la pregunta. En todo caso es excelente la acotación, porque muchas veces se hacen CGIs a diestra y siniestra, sin considerar las implicaciones de seguridad que esto tiene. -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From emhn at telcel.net.ve Mon Jun 26 10:50:26 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: Presentación References: <007401bfdf80$714ddf40$559a48d8@administrador> Message-ID: <00062611552201.11537@asterix> On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote: >#!/usr/bin/perl >#file: upload.pl > >use CGI qw/:standard/; > >print header, > start_html('file upload'), > h1('file upload'); >print_form() unless param; >print_results() if param; >print end_html; > >sub print_form { > print start_multipart_form(), > filefield(-name=>'upload',-size=>60),br, > submit(-label=>'Upload File'), > end_form; >} > >sub print_results { > my $length; > my $file = param('upload'); > if (!$file) { > print "No file uploaded."; > return; > } > print h2('File name'),$file; > print h2('File MIME type'), > uploadInfo($file)->{'Content-Type'}; > while (<$file>) { > $length += length($_); > } > print h2('File length'),$length; >} El programa que adjuntaste solamente permite al usuario indicar el nombre del archivo y en la rutina print_results _solamente_ se indica la longitud del archivo; si quieres _salvarlo_ en el servidor, debes abrir un archivo en algún directorio de acceso público o semipúblico y copiar las líneas del archivo. En otras palabras, reemplaza el while por open(COPIAR,">/tmp/subida"); while (<$file>) { # Leo de línea en línea print COPIAR $_; } close(COPIAR); close($file); Si el archivo que se sube es binario (GIF, JPEG, basura Word/Excel/Powerpoint), se complica un poco más porque el concepto de "línea" no existe, de manera que debes usar algo como open(COPIAR,">/tmp/subida"); while ($bytes = read($filename,$buffer,1024)) { # Leo en buffers de 1k print COPIAR $buffer; } close(COPIAR); close($file); -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- Para suspender la suscripción a esta lista, favor enviar un e-mail a colocando "UNSUBSCRIBE caracas-pm-list" en el cuerpo. From emhn at telcel.net.ve Mon Jun 26 11:12:33 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: Nettiquete Message-ID: <00062612202103.11537@asterix> Acabo de completar la configuración del Nettiquete de caracas-pm-list. Todo _nuevo_ suscriptor recibirá _automáticamente_ el Nettiquete; cualquier suscriptor puede solicitarlo explícitamente enviando un mensaje a cuyo cuerpo contenga "info caracas-pm-list". Para los que no lo saben, las reglas de Nettiquete son _esenciales_ de comprender y respetar para el funcionamiento eficiente de cualquier medio de comunicación electrónica. El irrespeto consuetudinario a estas normas tendrá como consecuencia la cancelación de la suscripción sin aviso y sin protesto. Adicionalmente, he agregado a la cola de los mensajes la información pertinente. -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From gouveia at correiodecaracas.com Mon Jun 26 11:26:56 2000 From: gouveia at correiodecaracas.com (Felipe Gouveia - Correio de Caracas) Date: Wed Aug 4 23:59:16 2004 Subject: Sobre el script References: <007401bfdf80$714ddf40$559a48d8@administrador> <00062611552201.11537@asterix> Message-ID: <00c101bfdf8b$59acac80$559a48d8@administrador> Ernesto Perdona que te vuelva a incomodar Hice el cambio que me indicaste pero el servidor me dice que "The server encountered an internal error or misconfiguration and was unable to complete your request." Creo que es porque algo está mal. Repito que recién estoy estudiando programación y no Perl. Hasta ahora solo he modificado algunos scripts. Por favor analicelo y digame algo. Aprovecho para preguntar que site me recomienda sobre Perl (para aprender) preferiblemente en español, porque en inglés me tardo mucho más leyendo. ¿Tiene algún archivo sobre rotación de banners? Un abrazo Felipe Gouveia El archivo quedó asi: #!/usr/bin/perl #file: upload.pl use CGI qw/:standard/; print header, start_html('file upload'), h1('file upload'); print_form() unless param; print_results() if param; print end_html; sub print_form { print start_multipart_form(), filefield(-name=>'upload',-size=>60),br, submit(-label=>'Upload File'), end_form; } sub print_results { my $length; my $file = param('upload'); if (!$file) { print "No file uploaded."; return; } print h2('File name'),$file; print h2('File MIME type'), uploadInfo($file)->{'Content-Type'}; open (COPIAR,">../../htdocs/transferencia"); while ytes=read($filename,$buffer,1024)){ print COPIAR $buffer; } close(COPIAR); close($file); $length += length($_); } print h2('File length'),$length; } ----- Original Message ----- From: Ernesto Hernandez-Novich To: Sent: Monday, June 26, 2000 11:50 AM Subject: RE: Presentación > On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote: > >#!/usr/bin/perl > >#file: upload.pl > > > >use CGI qw/:standard/; > > > >print header, > > start_html('file upload'), > > h1('file upload'); > >print_form() unless param; > >print_results() if param; > >print end_html; > > > >sub pr int_form { > > print start_multipart_form(), > > filefield(-name=>'upload',-size=>60),br, > > submit(-label=>'Upload File'), > > end_form; > >} > > > >sub print_results { > > my $length; > > my $file = param('upload'); > > if (!$file) { > > print "No file uploaded."; > > return; > > } > > print h2('File name'),$file; > > print h2('File MIME type'), > > uploadInfo($file)->{'Content-Type'}; > > while (<$file>) { > > $length += length($_); > > } > > print h2('File length'),$length; > >} > > El programa que adjuntaste solamente permite al usuario indicar el nombre del > archivo y en la rutina print_results _solamente_ se indica la longitud del > archivo; si quieres _salvarlo_ en el servidor, debes abrir un archivo en algún > directorio de acceso público o semipúblico y copiar las líneas del archivo. > > En otras palabras, reemplaza el while por > > open(COPIAR,">/tmp/subida"); > while (<$file>) { # Leo de línea en línea > print COPIAR $_; > } > close(COPIAR); > close($file); > > Si el archivo que se sube es binario (GIF, JPEG, basura Word/Excel/Powerpoint), > se complica un poco más porque el concepto de "línea" no existe, de manera que > debes usar algo como > > open(COPIAR,">/tmp/subida"); > while ($bytes = read($filename,$buffer,1024)) { # Leo en buffers de 1k > print COPIAR $buffer; > } > close(COPIAR); > close($file); > -- > Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! > One thing is to be the best, and another is to be the most popular. > -----BEGIN GEEK CODE BLOCK----- > Version: 3.1 > GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V > PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ > -----END GEEK CODE BLOCK----- > Para suspender la suscripción a esta lista, favor enviar un e-mail a > colocando "UNSUBSCRIBE caracas-pm-list" > en el cuerpo. > ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Jun 26 12:44:02 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: Sobre el script References: <00c101bfdf8b$59acac80$559a48d8@administrador> Message-ID: <00062613475708.11537@asterix> On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote: >Ernesto >Perdona que te vuelva a incomodar >Hice el cambio que me indicaste pero el servidor me dice que > >"The server encountered an internal error or misconfiguration and was unable >to complete your request." Tienes un error de sintaxis o de ejecución en el programa. Como está corriendo a través de un servidor Web, debes buscar en el archivo de errores del mismo para determinar cuál fue la falla exacta. En Apache, generalmente es /var/log/httpd_access.log, o cualquier cosa que hayas puesto en el archivo de configuración. >Aprovecho para preguntar que site me recomienda sobre Perl (para aprender) >preferiblemente en español, porque en inglés me tardo mucho más leyendo. No puedo recomendarte ningún sitio en español, porque no conozco ninguno. >¿Tiene algún archivo sobre rotación de banners? Ninguno. >El archivo quedó asi: [...] > open (COPIAR,">../../htdocs/transferencia"); Lo más probable es que no pueda escribir ese archivo. Usa caminos absolutos y asegúrate que tengas permisos para crear y escribir el archivo. -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From gouveia at correiodecaracas.com Mon Jun 26 13:14:44 2000 From: gouveia at correiodecaracas.com (Felipe Gouveia - Correio de Caracas) Date: Wed Aug 4 23:59:16 2004 Subject: Sobre el script References: <00c101bfdf8b$59acac80$559a48d8@administrador> <00062613475708.11537@asterix> Message-ID: <000901bfdf9a$690bc580$d49a48d8@administrador> Creo que esto va a dar mucho más trabajo de lo que imaginaba En otras condiciones desisitiría pero como las personas que me van a enviar los archivos no saben hacer ftp y el tamaño de los archivos es un poco grande para transmitir por email, tengo que continuar intentando. So considerar necesario le doy mi teléfono o me indica un número y le llamo. Estos son los errores reporta el archivo log. syntax error at /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi line 41, near "}" Execution of /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi aborted due to compilation errors. ESTE ES EL ULTIMO [Tue Jun 27 02:21:04 2000] [error] [client 200.47.79.3] Premature end of script headers: /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi Un abrazo Felipe Gouveia ----- Original Message ----- From: Ernesto Hernandez-Novich To: Sent: Monday, June 26, 2000 1:44 PM Subject: Re: Sobre el script > On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote: > >Ernesto > >Perdona que te vuelva a incomodar > >Hice el cambio que me indicaste pero el servidor me dice que > > > >"The server encountered an internal error or misconfiguration and was unable > >to complete your request." > > Tienes un error de sintaxis o de ejecución en el programa. Como está corriendo a > través de un servidor Web, debes buscar en el archivo de errores del mismo para > determinar cuál fue la falla exacta. En Apache, generalmente es > /var/log/httpd_access.log, o cualquier cosa que hayas puesto en el archivo de > configuración. > > >Aprovecho para preguntar que site me recomienda sobre Perl (para aprender) > >preferiblemente en español, porque en inglés me tardo mucho más leyendo. > > No puedo recomendarte ningún sitio en español, porque no conozco ninguno. > > >¿Tiene algún archivo sobre rotación de banners? > > Ninguno. > > >El archivo quedó asi: > [...] > > open (COPIAR,">../../htdocs/transferencia"); > > Lo más probable es que no pueda escribir ese archivo. Usa caminos absolutos y > asegúrate que tengas permisos para crear y escribir el archivo. > -- > Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! > One thing is to be the best, and another is to be the most popular. > -----BEGIN GEEK CODE BLOCK----- > Version: 3.1 > GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V > PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ > -----END GEEK CODE BLOCK----- > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ > ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From cmolina at truevision.net Mon Jun 26 13:48:51 2000 From: cmolina at truevision.net (Carlos A. Molina G. (ADM)) Date: Wed Aug 4 23:59:16 2004 Subject: Sobre el script References: <00c101bfdf8b$59acac80$559a48d8@administrador> <00062613475708.11537@asterix> <000901bfdf9a$690bc580$d49a48d8@administrador> Message-ID: <3957A592.F67EC0C3@truevision.net> Como te dice el log... Tienes un error en la linea 41 del script... Con vi lo haces asi vi +41 PATH_DEL_ARCHIVO Yo vi el script y no vi ningun intento de escritura en el /tmp Bye Felipe Gouveia - Correio de Caracas wrote: > Creo que esto va a dar mucho m?s trabajo de lo que imaginaba > En otras condiciones desisitir?a pero como las personas que me van a enviar > los archivos no saben hacer ftp y el tama?o de los archivos es un poco > grande para transmitir por email, tengo que continuar intentando. > So considerar necesario le doy mi tel?fono o me indica un n?mero y le llamo. > > Estos son los errores reporta el archivo log. > > syntax error at > /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi > line 41, near "}" > > Execution of > /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi > aborted due to compilation errors. > > ESTE ES EL ULTIMO > > [Tue Jun 27 02:21:04 2000] [error] [client 200.47.79.3] Premature end of > script headers: > /usr/local/etc/httpd/sites/correiodecaracas.com/cgi-bin/htdocs/upload.cgi > > Un abrazo > Felipe Gouveia > > ----- Original Message ----- > From: Ernesto Hernandez-Novich > To: > Sent: Monday, June 26, 2000 1:44 PM > Subject: Re: Sobre el script > > > On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote: > > >Ernesto > > >Perdona que te vuelva a incomodar > > >Hice el cambio que me indicaste pero el servidor me dice que > > > > > >"The server encountered an internal error or misconfiguration and was > unable > > >to complete your request." > > > > Tienes un error de sintaxis o de ejecuci?n en el programa. Como est? > corriendo a > > trav?s de un servidor Web, debes buscar en el archivo de errores del mismo > para > > determinar cu?l fue la falla exacta. En Apache, generalmente es > > /var/log/httpd_access.log, o cualquier cosa que hayas puesto en el archivo > de > > configuraci?n. > > > > >Aprovecho para preguntar que site me recomienda sobre Perl (para > aprender) > > >preferiblemente en espa?ol, porque en ingl?s me tardo mucho m?s leyendo. > > > > No puedo recomendarte ning?n sitio en espa?ol, porque no conozco ninguno. > > > > >?Tiene alg?n archivo sobre rotaci?n de banners? > > > > Ninguno. > > > > >El archivo qued? asi: > > [...] > > > open (COPIAR,">../../htdocs/transferencia"); > > > > Lo m?s probable es que no pueda escribir ese archivo. Usa caminos > absolutos y > > aseg?rate que tengas permisos para crear y escribir el archivo. > > -- > > Ernesto Hern?ndez-Novich - Running Linux 2.2.14 - Unix: Live free or die! > > One thing is to be the best, and another is to be the most popular. > > -----BEGIN GEEK CODE BLOCK----- > > Version: 3.1 > > GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- > M- V > > PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ > > -----END GEEK CODE BLOCK----- > > ------------------------------------------------------------------------ > > Enviar e-mail a colocando en el cuerpo: > > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > > ------------------------------------------------------------------------ > > > > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ -- -------------------- Carlos A. Molina G. Network Manager TrueVision Corp. cmolina@truevision.net ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From iaponte at cantv.net Wed Jun 28 18:50:12 2000 From: iaponte at cantv.net (=?iso-8859-1?Q?Iv=E1n_Aponte?=) Date: Wed Aug 4 23:59:16 2004 Subject: splice en un foreach loop Message-ID: <003301bfe15b$acd6e020$0200000a@cantv.net> Hola Mongers: Estoy haciendo un programa que une dos strings si el ultimo tiene la palabra 'continuacion'. Si los strings estan en el array @a y lo que quiero es que cuando se unan los strings y desaparezca una posicion y se corran los elementos (con la funcion splice). ? modifica este splice en algo el loop foreach donde estoy haciendo las pruebas?. He aqui el codigo. // tab2txt.pl (...) foreach $l (@a) { if ($l =~ /continuacion/gi){ $todo =$a[$i] . $l; splice ( @a, $i, 2, $todo); $i++} $i++;} -- atte, Iv?n (iaponte@cantv.net) ICQ: 14176647 The box said "Windows 95 or better" so I installed Unix -----BEGIN GEEK CODE BLOCK----- GB/CS/M d-- s-:++ a? C++++ USHLA++++ P+++(++++) o L+++ E-- W+++ N++ K--- w--- M+ V-- PS PE++ !O Y+ PGP++ t- 5? X+ R++ tv? b+++ DI++++ D-- G e? h* r+++ z+ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Jun 28 20:57:42 2000 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:16 2004 Subject: splice en un foreach loop References: <003301bfe15b$acd6e020$0200000a@cantv.net> Message-ID: <0006282206530E.11537@asterix> On Wed, 28 Jun 2000, Iván Aponte wrote: >Hola Mongers: > >Estoy haciendo un programa que une dos strings si el ultimo tiene la palabra >'continuacion'. >Si los strings estan en el array @a y lo que quiero es que cuando se unan >los strings y desaparezca una posicion y se corran los elementos (con la >funcion splice). ¿ modifica este splice en algo el loop foreach donde estoy >haciendo las pruebas?. He aqui el codigo. > >// tab2txt.pl >(...) >foreach $l (@a) { > if ($l =~ /continuacion/gi){ > $todo =$a[$i] . $l; > splice ( @a, $i, 2, $todo); > $i++} > $i++;} > El splice tiene un "efecto lateral", de manera que influye en el foreach. ¿Supongo que $i comienza en 0, y @a es una lista de strings (líneas de un archivo quizás?) y lo que quieres es que si el string dice "continuacion", le concatene el inmediato siguiente? -- Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die! One thing is to be the best, and another is to be the most popular. -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++ -----END GEEK CODE BLOCK----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------