• Publicidad

Upload y download formulario

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor explorer » 2009-04-06 06:25 @309

Me interesaría más ver un ejemplo de datos. Vamos, un par de líneas coordinates para ver cómo son.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor apardo » 2009-04-06 11:02 @501

¡Tienes razón!

http://miquegordis.100webspace.net/coord_kml/

De todas formas, te copio un trozo de código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
                        <Placemark>
                                <name>Arriba</name>
                                <LookAt>
                                        <longitude>-7.018460310544104</longitude>
                                        <latitude>38.84785306307444</latitude>
                                        <altitude>0</altitude>
                                        <range>40889.32504021958</range>
                                        <tilt>0</tilt>
                                        <heading>2.259488456875881</heading>
                                        <altitudeMode>relativeToGround</altitudeMode>
                                </LookAt>
                                <styleUrl>#msn_ylw-pushpin</styleUrl>
                                <Point>
                                        <coordinates>-7.047238052712176,38.9158011696726,0</coordinates>
                                </Point>
                        </Placemark>
                        <Placemark>
                                <name>Abajo</name>
                                <LookAt>
                                        <longitude>-7.018460310544104</longitude>
                                        <latitude>38.84785306307444</latitude>
                                        <altitude>0</altitude>
                                        <range>40889.32504021958</range>
                                        <tilt>0</tilt>
                                        <heading>2.259488456875881</heading>
                                        <altitudeMode>relativeToGround</altitudeMode>
                                </LookAt>
                                <styleUrl>#msn_ylw-pushpin0</styleUrl>
                                <Point>
                                        <coordinates>-6.906189289274064,38.83413135517162,0</coordinates>
                                </Point>
                        </Placemark>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¡Saludos!
apardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2009-03-31 16:58 @748

Notapor explorer » 2009-04-06 11:19 @513

Vale, ya lo pillo...

El problema era que no filtrabas todos los caracteres tabulador. Solo quitabas uno. Deberías poner un /g en el operador sustitución para que lo haga a lo largo de toda la línea.

Otra forma de leer las coordenadas se puede hacer así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @Tabla;

while (<>) {
    if (/<(coordinates)>(.*)<\/\1>/) {
        my @coordenadas = split ',', $2;
        push @Tabla, @coordenadas[0,1];
    }
}

use Data::Dumper;
print Dumper \@Tabla;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

En la expresión regular, buscamos la etiqueta <coordinates>, capturamos lo que le sigue, hasta la próxima etiqueta de cierre. Usamos un par de paréntesis de captura alrededor de coordinates para no tener que volver a escribirlo al final (lo ponemos con \1 que equivale a ese primer par de paréntesis de captura).

Luego, hacemos el split() correspondiente, pero solo del segundo par de paréntesis ($2). Y guardamos los dos primeros valores en la @Tabla.

Sale:
Código: Seleccionar todo
$VAR1 = [
          '-7.047238052712176',
          '38.9158011696726',
          '-6.906189289274064',
          '38.83413135517162'
        ];


Las dos líneas del if() se pueden resumir en
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        push @Tabla, (split ',', $2)[0,1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero nos movemos en el terreno de los listillos...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor apardo » 2009-04-06 12:42 @571

¡Gracias explorer!
apardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2009-03-31 16:58 @748

Eliminar archivo al finalizar un cgi

Notapor apardo » 2009-04-23 18:15 @802

Buenas.

Tengo un problema al finalizar un CGI llamado desde un formulario. Es la continuación de la pregunta que puse hace unos días sobre upload y download de formularios:

Por fin tengo el CGI que es ejecutado desde un formulario. Con los valores introducidos por el usuario, genero un archivo y le doy al usuario la opción de descargar ese fichero. Lo que quiero es que cuando el usuario salga del CGI, se borre el archivo.

El formulario está aquí: http://miquegordis.100webspace.net/coord_a_mano.html

Por ejemplo, introduciendo
Código: Seleccionar todo
40   
-6
39.5
-5.5

y dando a enviar, mostrará la ventana de download.

Lo que quiero es que tanto si el usuario se baja el archivo como si no, que se borre del servidor.

No sé cómo hacerlo, pongo el unlink() en la última instrucción del archivo, pero entonces lo borra sin dar tiempo a la descarga.

¿Alguien me puede echar una mano?

Gracias anticipadas / Saludos / apardo
apardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2009-03-31 16:58 @748

Notapor explorer » 2009-04-24 01:17 @095

Supongamos que creas el fichero con un nombre que esté relacionado con el usuario, para permitir el uso del CGI por más de un usuario al mismo tiempo.

Entonces la solución para borrar el fichero es... no borrarlo.

Cada vez que entre el usuario, el CGI lo abre en modo de escritura, sobre escribiendo el contenido anterior.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor apardo » 2009-04-24 02:59 @166

Hola explorer, gracias por responder.

Cierto, no he tenido en cuenta que concurran varios usuarios, aunque es muy poco probable el conflicto porque el nombre del fichero se forma con los datos introducidos en el formulario.

No sé cómo relacionar el nombre de archivo con el usuario. Casi seguro que Perl tiene alguna función tipo "randomize" para crear un numero aleatorio, ¿verdad? y darle ese nombre al archivo.

En cualquier caso, yo no voy a hacer nada con el archivo generado por el usuario y tampoco entro habitualmente a administrar la web, por lo que me interesa borrar el archivo. Quien lo necesite exactamente igual (poco probable) que se lo genere de nuevo con el formulario.

Gracias / Saludos
apardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2009-03-31 16:58 @748

Notapor explorer » 2009-04-24 04:08 @213

Supongamos que tienes un directorio en donde generas ese tipo de archivos, cuyos nombres los sacas con la ayuda del módulo File::Temp.

Entonces una buena estrategia es, nada más terminar el CGI, entrar en el directorio y borrar los ficheros que tengan más de... un día, por ejemplo. Con el operador -M es fácil.

Esta es una técnica que he usado bastante.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor apardo » 2009-04-24 05:07 @255

Hola de nuevo.

¡¡ Gracias, explorer !!

La documentación de Perl es muy "empachosa".

¡¡Con tus ayudas y los link, la documentación apropiada se hace mucho más digerible!!

¿El proceso de borrado es algo así?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $kmlDir = '../coord_kml';
my @resultado = `find $kmlDir -name \"*.kml\"`;
foreach my $fich_kml (@resultado) {
  if ((-M $fich_kml) > 1) { unlink $fich_kml ; }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El servidor donde tengo la web no admite scripts para ejecución en crontab de UNIX. De esta forma, cada usuario limpia el directorio de los archivos creados por usuarios anteriores :)

Gracias / Saludos
apardo
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2009-03-31 16:58 @748

Notapor explorer » 2009-04-24 13:56 @622

Pues sí señor... de eso se trataba: borrar lo viejo al final del CGI.

De todas formas, veo que haces demasiado para lo poco que es... ¿llamar a find? NO LO NECESITAS :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $fich_kml ( <../coord_kml/*.kml> ) {
    unlink $fich_kml if -M $fich_kml > 1;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

que también puedes dejarlo en algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for ( <../coord_kml/*.kml> ) {
    unlink if -M > 1;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

que incluso puede quedar así,
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
unlink grep { -M > 1 } <../coord_kml/*.kml>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero dará un aviso si están activos los warnings y no tiene que borrar ningún fichero.

Si al final quieres hacerlo con find, lo puedes hacer con solo una orden (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
find ../coord_kml/ -maxdepth 1 -name '*.kml' -mtime +1 -exec rm {} \;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero... recuerda que entonces estarás ejecutando un proceso más. Bueno, no... un find más un rm por cada fichero a borrar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron