Foros del Web » Programando para Internet » PHP »

Necesito hacer unlink, pero ¿cuando?

Estas en el tema de Necesito hacer unlink, pero ¿cuando? en el foro de PHP en Foros del Web. Saludos, resulta que estoy haciendo un sitio web que (suelto esto para poneros en contexto) llama a unos webServices, recibo datos y entre ellos recibo ...
  #1 (permalink)  
Antiguo 23/10/2009, 09:36
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 35
Antigüedad: 20 años, 6 meses
Puntos: 1
Necesito hacer unlink, pero ¿cuando?

Saludos, resulta que estoy haciendo un sitio web que (suelto esto para poneros en contexto) llama a unos webServices, recibo datos y entre ellos recibo imagenes en formato base64, que para que se vean correctamente en IE6 e IE7 las guardo en un archivo *temporal*, y las muestro.

Mi problema es este, sé que debo eliminarlas pero no sé en qué momento, si hago el unlink al final de la página php la foto desaparece. ¿Cuál sería la mejor manera, o la manera de mostrar una foto y luego eliminarla?

Muchas gracias.
__________________
^ReG^
  #2 (permalink)  
Antiguo 23/10/2009, 09:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Necesito hacer unlink, pero ¿cuando?

¿Por qué tienes que crear un archivo temporal para visualizar una foto? Pero contestando tu pregunta, lo mejor es usar un cron job y este se encargue de ejecutar algun codigo cada cierto tiempo para borrar la imagen.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 23/10/2009, 09:58
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 35
Antigüedad: 20 años, 6 meses
Puntos: 1
Respuesta: Necesito hacer unlink, pero ¿cuando?

Cita:
Iniciado por abimaelrc Ver Mensaje
¿Por qué tienes que crear un archivo temporal para visualizar una foto? Pero contestando tu pregunta, lo mejor es usar un cron job y este se encargue de ejecutar algun codigo cada cierto tiempo para borrar la imagen.
Porque una de las maneras de hacer que una imagen base64 se vea bien en IE6 e IE7, de hecho la única que conozco que funcione para imágenes grandes, exige poner toda la parrafada de caracteres en un archivo y cargar el archivo, en vez de pintar el valor de la cadena directamente en el src de la imagen.

Me parece bien lo del cron job, si no encuentro la forma de hacerlo en el propio código tiraré por ahí :)
__________________
^ReG^
  #4 (permalink)  
Antiguo 23/10/2009, 10:02
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Necesito hacer unlink, pero ¿cuando?

Lo que sucede es que, si lo haces en el mismo codigo, este borrara la imagen antes de enviarla al navegador del usuario, porque el codigo corre en el servidor y luego envia el resultado. Por eso indique más bien lo de borrarla usando algun cron job.

PD: ¿tienes algun link que dé una tutoria con respecto a lo que haces? Me refiero a lo de una imagen base64 se vea bien en IE6 e IE7. Mientras tanto voy buscando en internet al respecto.

Edito: Mira lo que encontre navegado rapido por internet para mostrar imagenes en navegadores IE.
Código PHP:
Ver original
  1. <?php
  2. if(!empty($_SERVER["QUERY_STRING"])) {
  3.   $data = split(";", $_SERVER["QUERY_STRING"]);
  4.   $type = $data[0];
  5.   $data = split(",", $data[1]);
  6.   header("Content-type: ".$type);
  7.   echo base64_decode($data[1]);
  8.   die();
  9. } else {
  10. ?>
  11. <html>
  12. <body>
  13.   <script>
  14.   // Expression Regular para encontrar imágenes en Base64
  15.   var BASE64_DATA = /^data:.*;base64/i;
  16.   // Path al script php que decodifica el código
  17.   var base64Path = "prueba.php";
  18.   function fixBase64(img) {
  19.     // check the image source
  20.     if (BASE64_DATA.test(img.src)) {
  21.       // pass the data to the PHP routine
  22.       img.src = base64Path + "?" + img.src.slice(5);
  23.     }
  24. };
  25.  
  26. // fix images on page load
  27. onload = function() {
  28.   for (var i = 0; i < document.images.length; i++) {
  29.   fixBase64(document.images[i]);
  30. }
  31. };
  32. </script>
  33.  
  34. <img src="data:image/gif;base64,R0lGODlhNQAkAKIAAHJycvwHBwAAqwCjC+3PDv///wAAAAAAACwAAAAANQAkAAAItAAHCBxIsODAAggTKlyYMIDDhxAjOjRIsSDDiwslaoRYseMAjCALbBzpsWJIjCM3lqR48mJKjSsNtmT4UmJMizMV1ox4k2BOnTsf9jz4E2FQoUMFhV5NEBSpUWbOk26lOnRp1WlYl2qlSrXplujgvUq9irZn12HZh2r9qvZtmWDhkXLtufat3bdyj2bM23euDvn9q178+5euHTxFtYbmO9Mv4sB1xT8mHBMw40RD1Z8mXHNgAA7" alt="Base64 encoded image" width="150" height="150"/>
  35. </body>
  36. </html>
  37. <?php
  38. }
  39. ?>
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 23/10/2009 a las 10:10
  #5 (permalink)  
Antiguo 26/10/2009, 02:18
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 35
Antigüedad: 20 años, 6 meses
Puntos: 1
Busqueda Respuesta: Necesito hacer unlink, pero ¿cuando?

Ese código va bien para imagenes pequeñas, pero falla si la imagen (y por tanto la cadena) es un poco grande. La única solución válida que he encontrado para todos los casos es hacer una función en php:

Código:
function base64_to_jpeg($imageData, $outputfile) {		

   $ifp = fopen( $outputfile, "wb" );
			
   fwrite( $ifp, base64_decode( $imageData ) );
			
   fclose( $ifp );	
			
   return( $outputfile );
			
}
Esto crea un archivo para la imagen a partir de la cadena dada y así no surge ningún problema.
__________________
^ReG^
  #6 (permalink)  
Antiguo 26/10/2009, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Necesito hacer unlink, pero ¿cuando?

y porque no usas directo PHP para mandar el stream de la imagen, por ejemplo:

Código PHP:
Ver original
  1. $imagen = "ASDASD"; // datos que vienen en base64
  2. $img = imagecreatefromstring(base64decode($imagen);
  3. imagejpg($img);

Eso lo mandas llamar desde un tag <img src="script.php">

Saludos.
  #7 (permalink)  
Antiguo 26/10/2009, 10:15
 
Fecha de Ingreso: octubre-2003
Ubicación: Barcelona
Mensajes: 35
Antigüedad: 20 años, 6 meses
Puntos: 1
Respuesta: Necesito hacer unlink, pero ¿cuando?

Cita:
Iniciado por GatorV Ver Mensaje
y porque no usas directo PHP para mandar el stream de la imagen, por ejemplo:

Código PHP:
Ver original
  1. $imagen = "ASDASD"; // datos que vienen en base64
  2. $img = imagecreatefromstring(base64decode($imagen);
  3. imagejpg($img);

Eso lo mandas llamar desde un tag <img src="script.php">

Saludos.
Porque a ese img.php debería pasarle el código de la imagen via URL por GET (no es para una imagen en concreto, sería para algo dinámico) y esto provoca el siguiente error (a no ser que haya otra manera de enviar la información que esté pasando por alto):

Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.
__________________
^ReG^
  #8 (permalink)  
Antiguo 26/10/2009, 10:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Necesito hacer unlink, pero ¿cuando?

No necesitas pasar todo el string de base64, puedes pasar solo el ID o algo por el estilo y hacer la consulta y extracción desde el webservice en el mismo script.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 01:08.