Cambia
Using perl Syntax Highlighting
por
Using perl Syntax Highlighting
La etiqueta ':cgi' hace importar un montón de funciones y variables relacionadas con operaciones de CGI a nuestro programa. Una de ellas es la función upload().
Aprender a usar el módulo CGI es muy importante, y solo hay dos formas de hacerlo: leyendo mucho código y leyendo su manual de instrucciones.
Sí, ya sé que es un auténtico ladrillo, pero los beneficios son muchos. Entre ellos, dejar tu programa así.
Con una página HTML así:
Using html4strict Syntax Highlighting
- <html>
- <body>
- <form method="POST" enctype="multipart/form-data" action="cgi-bin/code_18877.pl">
- <input type="file" name="file" size="50"> <input type="submit" value="Enviar" />
- </form>
- </body>
- </html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
queda el programa así (una de las muchas formas de hacerlo):
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use strict;
- use warnings;
- use diagnostics;
- use CGI ':standard';
- use CGI::Carp 'fatalsToBrowser';
- ## Constantes
- my @extensiones = qw( gif jpg jpeg bmp png txt ); # Arreglo con extensiones de archivos que podemos recibir
- my $dir = '/home/explorer.joaquinferrero.com/public_html/tmp'; # Directorio donde queremos estacionar los archivos
- ## Variables
- my $fichero_a_recibir = param('file') || '';
- ## Proceso
- foreach my $extension (@extensiones) {
- if ($fichero_a_recibir =~ /\.$extension/) {
- my $fh = upload('file');
- if (!$fh && cgi_error) { # Ocurrió un error o el usuario abortó el envío
- print header(-status => cgi_error);
- exit 0;
- }
- my $fichero_a_grabar = "$dir/$fichero_a_recibir";
- open OUT, ">$fichero_a_grabar" or die "ERROR: No puedo escribir $fichero_a_grabar: $!\n";
- while (read($fh, my $buffer, 1024)) {
- print OUT $buffer; # Copia
- }
- close OUT;
- print header # Gracias
- , start_html('Gracias por el envío')
- , p("Gracias por el envío de $fichero_a_recibir")
- , end_html
- ;
- exit;
- }
- }
- print header # Oops... algo fue mal
- , start_html('ERROR')
- , h1('Extensión incorrecta')
- , p("Sólo se reciben archivos con extensiones: @extensiones")
- , p("Archivo: [$fichero_a_recibir]")
- , end_html
- ;
- __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4