• Publicidad

¿Cómo generar una imagen con Perl?

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

Re: ¿Cómo generar una imagen con Perl?

Notapor explorer » 2006-04-03 13:47 @616

slopal escribiste:Primero, chdir lo tengo que hacer en un system? pq suelto no lo entiende (syntax error), y system no me funciona (una larga historia)... alguna otra forma?
chdir '/var/www/misitioweb/tmp';
slopal escribiste:Y luego, para buscar las imagenes, el * no me lo entiende :(
El * funciona igual que en la línea de comandos, es decir, es un comodín que representa 0 o más caracteres cualesquiera. Prueba a hacer un perl -le 'print <image*.gif>;' desde la línea de comandos en el directorio donde estan las imágenes.
slopal escribiste:he probado en el mismo directorio donde estar a hacer un ulink de *.temp (ficheros creados alli) y no los borra, en cambio poniendo el nombre ..dfslfdf.temp concreto, sí. pq puede ser?
Prueba con unlink <*.temp>; (está como ejemplo en la documentación).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor slopal » 2006-04-10 09:07 @421

gracias explorer!
despues de mirar varias cosillas ya consigo recoger en el array todas las imágenes (hago un print de la variable y me las muestra).

Ahora el problema lo tengo con el unlink que me da el siguiente error:

Insecure dependency in unlink while running with -T switch at /var/www-cgi/gralggen.lsi.upc.es/freq/freq.cgi line 701

mi código concreto es este:
Código: Seleccionar todo
foreach my $temporal (@temporals)
{
       foreach my $temporal ( @temporals ) {
               unlink $temporal if -M $temporal > 3; # Borrar en caso de tener más de 3 días
               print "esborrada<br>\n";
       }
}


no he sabido ver que es...
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: ¿Cómo generar una imagen con Perl?

Notapor explorer » 2006-04-10 10:09 @465

Pues el mensaje de error es claro: mientras estés usando el modo 'taint', no te dejará borrar ningún fichero con unlink (perlsec).
Tienes que hacerle convencer al Perl que realmente ese es el fichero que quieres borrar.
Prueba a cambiar el interior del foreach con estas líneas:
Código: Seleccionar todo
next if -M $temporal < 3;
my ($fichero) = $temporal =~ m/^(.+\.gif)$/;    # Aqui es de donde pasamos de un variable con datos externos a internos
next unless defined $fichero;
print "$fichero ha sido borrado<br>\n" if unlink $fichero;
Naturalmente, deberás cambiar la expresión regular para que reconozca el nombre de las imágenes que quieres borrar. En el ejemplo, sólo te he puesto ficheros *.gif.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-04-10 10:23 @474

explorer escribiste:Pues el mensaje de error es claro: mientras estés usando el modo 'taint', no te dejará borrar ningún fichero con unlink


pues es curioso pq varias lineas arriba hago:

Código: Seleccionar todo
unlink "$dir/$nom_fitxer";


y lo borra!!

voy a probar con la forma esta que me has dicho :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Notapor slopal » 2006-04-10 10:28 @477

slopal escribiste:
explorer escribiste:Pues el mensaje de error es claro: mientras estés usando el modo 'taint', no te dejará borrar ningún fichero con unlink


pues es curioso pq varias lineas arriba hago:

Código: Seleccionar todo
unlink "$dir/$nom_fitxer";


y lo borra!!

voy a probar con la forma esta que me has dicho :)


EDITO:

dada la curiosidad... he mirado qué diferencia había arriba y abajo y me he dado cuenta de los "" (con esto solo no funcionaba) y he visto que el problema ES el CHDIR...
pero sin hacer chdir como hago la lista de ficheros?! jeje voy a leerme tu solucion a ver si así puedo :)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: ¿Cómo generar una imagen con Perl?

Notapor explorer » 2006-04-10 10:32 @481

Lo más probable es que te deje usar $dir y $nom_fitxer porque serán variables con valores internos, a diferencia de $temporal. El modo Taint protege todas las variables con valores extraídos del exterior.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-04-10 10:50 @493

explorer escribiste:Lo más probable es que te deje usar $dir y $nom_fitxer porque serán variables con valores internos, a diferencia de $temporal. El modo Taint protege todas las variables con valores extraídos del exterior.


pues si que es eso pq con tu forma FUNCIONA!

:D GRACIAS!

por cierto, creo que entiendo la expresion.. significa lo mismo que *.png?
Es que no se pq hace falta volver a ponerlo... pq si ya haces la lista antes..

gracias (una cosa es que funcione, pero si lo entiendo mucho mejor no? :))
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: ¿Cómo generar una imagen con Perl?

Notapor explorer » 2006-04-10 11:00 @500

En tu programa, en la primera línea, habrás puesto '-T', con lo que estarás activando el modo 'Taint'.

Lo que hace es que trata a todo lo que venga de fuera del programa como 'sospechoso'. Esto se hace para evitar que un hacker pueda romper la funcionalidad del programa insertando información que nosotros pensamos que es legal, pero que puede romper la seguridad de nuestra máquina.

Cuando haces el listado de los ficheros disponibles, estás usando información (los nombres de los ficheros) como sospechosa. Sí, sabemos que los ficheros son nuestros, sabemos donde están y cómo se llaman... pero son externos a nuestro programa... ¿qué pasaría si alguien colocora allí un fichero que tuviera un nombre especial, tan especial que rompiera la ejecución del programa y le mandase hacer cosas que no quieres?.

Cuando entras al bucle foreach, el modo taint impregna a la varible $temporal (es decir, que sigue conteniendo información sospechosa).

Pero cuando Perl se encuentra con la expresión regular, en ese momento es como si le dijéramos que estamos tomando la precaución de que vamos a analizar con más detalle el nombre del fichero, que lo miraremos con lupa y que sólo nos quedaremos con lo que nos interesa.

Entonces, la variable $fichero se llena con el nombre del fichero y Perl la trata como que ya contiene información interna al programa.

Luego podremos hacer con ella lo que queramos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor slopal » 2006-04-10 11:06 @504

mil gracias :) que curioso todo esto


--------
una ultima preguntaaaaa!!

tengo otro directorio temporal
y hago la lista así:
Código: Seleccionar todo
my @temporals = <temp*>;


qué debería poner en la expresión?

Código: Seleccionar todo
 my ($tem_int) = $temporal ;#=~ m/^temp/;


algo asi?

despues de mirar y probar funciona con m/^(temp+.+)$/ (por si a alguien le sirve)
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Re: ¿Cómo generar una imagen con Perl?

Notapor explorer » 2006-06-07 04:47 @241

m/^(temp+.+)$/

A ver... creo que 'eso' no es del todo correcto, aunque funcione...

En esa expresión regular estás quedándote (()) con aquella expresión que concuerde con: un comienzo (^) seguido de 'tem', seguido de una o más letras 'p' (p+) y seguido de cualquier otro texto (.+), hasta el final de línea ($).

Lo del p+, me chirría... :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado