Foros del Web » Programando para Internet » PHP »

Sesiones e imagenes

Estas en el tema de Sesiones e imagenes en el foro de PHP en Foros del Web. Buenas, aqui mi pregunta. Estoy creando un pequeño panel de control de contenidos para un sitio. Este ademas de ingresar datos, permite subir un par ...
  #1 (permalink)  
Antiguo 28/08/2005, 13:12
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Sesiones e imagenes

Buenas, aqui mi pregunta.

Estoy creando un pequeño panel de control de contenidos para un sitio. Este ademas de ingresar datos, permite subir un par de imagenes. Como requiero un poco mas de cuidado en el proceso, creo una sesion donde guardo los datos, y en una ventana muestro el preview de lo que se esta agregando. Para tales efectos (porque vi que las imagenes que tengo en los tmp cuando hago el upload se borran automaticamente terminado el script) guardo la imagen dentro de una variable de sesion, y la muestro en un html (con el tag img) mediante un php mandando los headers, y todo funciona perfecto. El problema sucede cuando quiero guardar la imagen una vez que se da aceptar en el modo de preview ya que si se guarda en el folder correspondiente, pero cuando trato de abrirla con el photoshop me dice que no me reconoce el archivo. Trate con esto :

Código:
copy ("http://daniel.local/~daniel/site/admin/img/imagen.php?d=1&i=0", "destinos/dos.jpg");
Muchas gracias por su tiempo. Saludos!
__________________
www.subflash.com <-----visita
  #2 (permalink)  
Antiguo 28/08/2005, 13:40
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
ya vi que es un problema de sesiones que no se inician debido a que lo estoy ejecutando via script y no navegador...trate de de pasarle la sesion mediante get, pero al parecer tampoco...me manda esto


Warning: copy(http://daniel.local/~daniel/site/adm...37abaa02eaa0ad): failed to open stream: HTTP request failed! ¿ÿØ0¿ÿØx?á¤rfø in /Users/daniel/Sites/site/admin/execute.php on line 19
__________________
www.subflash.com <-----visita
  #3 (permalink)  
Antiguo 28/08/2005, 14:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No uses rutas relativas en tu copy() .. aunque desde PHP 4.? (no recuerdo la versión .. más info en: www.php.net/copy) puedes usar rutas relativas (http://....) lo que deberías usar es una ruta absoluta .. algo tipo ../../nose/dondesea/nose.tal .. o algo tipo: /home/www/sitio.com/public_html/imagenes/imagen.tal .. o donde esté tu ruta de tu sitio en tu servidor desde su raiz.

Por otro lado .. el Upload en sí lo debes hacer vía las variables $_FILES .. hasta que no sube tu archivo al servidor no puedes moverla a su destino definitivo (tanto para hacer tu previo como para moverla definitivamente) .. esto lo debes hacer con la función move_uploaded_file() y no copy() para evitar problemas de acceso restringido .. pues estás intentando acceder desde PHP a un archivo fuera tal vez de su ambito restringido por su "open_base_dir" (php.ini)

En resumen:
1) Sube tu archivo por tu actual formulario HTML con su campo tipo "file".
2) Muevelo a tu sito (bajo tu dominio) con move_uploaded_file().
3) Si necesitas hacer un previo .. hazlo desde donde movistes tu archivo ..
4) crea rutinas para borrar tu archivo "temporal" si pasado tu previo no lo requieres (undelete() por ejemplo si cancela el previo .. que de todas formas recuerda que el archivo ya subió al servidor, con el tiempo que eso le demore .. )
5) Una vez decidido tal vez que tu archivo te interesa .. muevelo con copy() hacia su destino definitivo.

Todo esto te evitará problemas por ejemplo con servidores configurados en modo seguro "SAFE_MODE" y otras restricciones que afecten a PHP.

Sobre el tema de sesiones y tus problemas .. En principio ya has visto que según el esquema que te planteo . .no tiene mucho sentido usar una sesión para llevar en ella todo el "binario" de tu archivo que has subido .. más que bien la sesión debes usarla simplemente para verificar si tu usuario está autentificado en tu sistema y a lo sumo en el proceso de movimeinto de tu archivo recien subido a tu destino temporal (para hacer tu previo), puedes asignarle como nombre de ese archivo el SID (Identificador único de sesion) .. algo tipo: $nombre_archivo = session_id()."_".$_FILES['imagen']['name'] ... quedandote algo tipo: 8978as98f768a68f_mimagen.jpg .. ahí tendrás esa imagen que pertenece a esa sesión .. útil para que filtres esos archivos a presentar como "previo" por ese ID (session_id() .. ) que correspondrá con el tuyo .. así otros usuarios no ven otros archivos "temporales" de otras sesiones activas. (Esto es sólo un ejemplo de como podrías usar la sesión para validaciones de este tipo)


Un saludo,
  #4 (permalink)  
Antiguo 28/08/2005, 20:42
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola Cluster. Muchas gracias por tus consejos, de hecho asi como me lo planteas ya lo habia pensado. Realmente el tema que me preocupa es como se van a borrar las imagenes en caso de que por cualquier razon se cierre el navegador (por eso meti los binarios dentro de una sesion). Aqui la ventaja es que tengo el servidor completamente para mi, asi que puedo manejar cualquier configuracion que desee. No se si exista una forma de mover los archivos como planteas y que despues de x tiempo se borren de ahi si no se termina de ejecutar todo el proceso.

Saludos!
__________________
www.subflash.com <-----visita
  #5 (permalink)  
Antiguo 28/08/2005, 22:16
 
Fecha de Ingreso: septiembre-2002
Ubicación: Mexico
Mensajes: 142
Antigüedad: 21 años, 7 meses
Puntos: 0
Encontre una solucion y es usando fopen, fwrite y fclose.

$o = fopen ("imagenes/dos.gif", "w+");
fwrite($o, $_SESSION['imagen'][4]);
fclose($o);

aun asi, me recomiendas usar el metodo normal? el tema que me preocupa es la eliminacion de la imagen en caso de que se cierre el navegador.

Saludos!
__________________
www.subflash.com <-----visita
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.