Foros del Web » Programando para Internet » PHP »

Upload de imágenes que funciona a medias

Estas en el tema de Upload de imágenes que funciona a medias en el foro de PHP en Foros del Web. Muy buenas. Hace tiempo que utilicé este código para subir imágenes al server (lo encontré aquí en forosdelweb), y funcionaba bien, o al menos eso ...
  #1 (permalink)  
Antiguo 12/10/2007, 13:43
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Upload de imágenes que funciona a medias

Muy buenas. Hace tiempo que utilicé este código para subir imágenes al server (lo encontré aquí en forosdelweb), y funcionaba bien, o al menos eso parecía. El caso es que ahora he descubierto un error que me está quebrando la quijotera. Las imágenes suben, pero al parecer siempre y cuando tengan una resolución menor de 1414x1061 píxeles. Es decir, probando he creado con photoshop una foto de 800x600 píxeles. La sube perfectamente.

He ido probando cambiando resoluciones y por ejemplo, a 1413x1060 sube perfectamente, pero a un píxel más ancho/alto, 1414x1061 ya da un error, y la página se carga a medias. De repente se corta el código y se queda una tabla a medias, incluso antes de llegar al código PHP.

¿Es raro de coj****, o no? Yo ya he probado de todo o casi todo y no logro dar con el error. Posteo el código para ver si algún alma caritativa me echa una manita y salgo adelante.

Código PHP:
$nombrefoto="1";
$dir="casas/".$nombrefoto."/";
$anchura=336;//Para foto grande
$altura=252;
$anchura_thumb=108;//Para foto pequeña
$altura_thumb=81;
$pos="L-T";
$c1=50;//Calidades
$c2=50;

$name=$_FILES["archivo"]['name']; 
$type=$_FILES["archivo"]['type']; 
$tamano=$_FILES["archivo"]['size'];
$image_name $name;
            
$extension "jpg";
            
$image_name=$nombrefoto.".".$extension;
                
if (
$type<>"image/pjpeg"){
    
$resultadoupload="El archivo seleccionado no es una imagen de tipo jpeg.";
}else{
    if (
$tamano<=2000000){
        
//Imagen original en el servidor 
        
$temp=$_FILES["archivo"]['tmp_name'];
        
        
//Objeto con el que trabajará el programa 
        
if($type=="image/pjpeg"){ 
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n");  
        }
                    
        
//INICIA PROCESO 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
if ($dimensiones[0]>=350){//Si la imagen es mayor o igual a 350 píxeles de ancho
            
if ($dimensiones[1]>=$dimensiones[0]/2){//Si el alto es mayor o igual al ancho entre 2
                
if ($dimensiones[1]<$dimensiones[0]){//Si el alto es menor que el ancho (si no es vertical)
        
                    
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
                    
$FFF imagecolorallocate($img255,255,255); 
                    
imagefill($image00$FFF); 
                    
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala
                    
fopen($dir.$image_name,'w+');
                    
imagejpeg($image,"$dir$image_name"$c1);//mueve la imagen al server (el segundo parámetro es la calidad) 
                    
imagedestroy($image); //destruye image 
                    
imagedestroy($img); //destruye la imagen "origen" 
                                
                    
$image_name2=$image_name;
                                                
                    
//Ahora voy con la imagen pequeña
                                
                    
$image_name=$nombrefoto2.".".$extension;
                                
                    
//Imagen original en el servidor 
                    
$temp=$_FILES["archivo"]['tmp_name'];
                        
                    
//Objeto con el que trabajará el programa 
                    
if($type=="image/pjpeg"){ 
                        
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n");  
                    }
                                
                    
//INICIA PROCESO 
                    
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
                    
$image imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen 
                    
$FFF imagecolorallocate($img255,255,255); 
                    
imagefill($image00$FFF); 
                    
imagecopyresampled ($image$img0000$anchura_thumb$altura_thumb$dimensiones[0], $dimensiones[1]);//reescala
                    
fopen($dir.$image_name,'w+');
                    
imagejpeg($image,"$dir$image_name"$c2);//mueve la imagen al server (el segundo parámetro es la calidad) 
                    
imagedestroy($image); //destruye image 
                    
imagedestroy($img); //destruye la imagen "origen"
                                
                    
$unique time(); 
                                
                    
$resultadoupload="La imagen se ha subido correctamente.";
                }else{
                    
$resultadoupload="No se admiten las imágenes verticales.";
                }
            }else{
                
$resultadoupload="El alto de la imagen es inferior a la mitad del ancho, por lo que no guarda relación de aspecto";
            }
        }else{
            
$resultadoupload="El ancho de la imagen es menor de 350 píxeles.";
        }
    }else{
        
$resultadoupload="El tamaño de la imagen supera el límite permitido (2MB)";
    }

__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #2 (permalink)  
Antiguo 12/10/2007, 13:56
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
Re: Upload de imágenes que funciona a medias

Que error da? Porque puede ser por exceso de tamaño en bytes...
  #3 (permalink)  
Antiguo 12/10/2007, 14:09
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Por exceso de tamaño no puede ser, porque sube imágenes de 900Kb y otras de 28Kb no las sube.

No da error, sino que el html se corta de repente en mitad de una tabla, e incluso aún de llegar a ejecutar el código PHP. Es decir, imaginémonos el siguiente ejemplo:

Código HTML:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <t
Así se queda, tan pancho. Bueno, sale más código, pero no os voy a mostrar todo el código html que no sirve de nada.

Pensé que podría ser también de max_execution_time, pero es imposible porque está a 30 y la imagen no tarda ni 3 segundos en subir.

Es raro, verdad? ¿Qué puede ser?
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #4 (permalink)  
Antiguo 12/10/2007, 16:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Upload de imágenes que funciona a medias

Puede ser problemas de configuracion de tu Apache y PHP, te recomiendo que reinstales o cheques la configuracion el tiempo de respuesta.

Saludos.
  #5 (permalink)  
Antiguo 12/10/2007, 17:40
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

El problema es que mi server está en Arsys, y no me dejan meter mano al php.ini ni ná de na. Pero ya os digo, el tiempo de respuesta no parece ser, ya que sube imágenes de gran tamaño (1 mega, etc, que se tira un tiempecillo subiendo) pero de una resolución menor (ejemplo, 800x600), y sin embargo una jpg en blanco de 20Kb que sube en 2 segundos pero tiene una resolución de 1414x1061 o mayor no la sube.

Debe ser otra cosa, y para decirles a los de Arsys que me miren algo o realicen algún cambio, primero tendré que saber qué puede ser, porque no tengo ni idea de por donde empezar.

¿Se os ocurre algo?
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #6 (permalink)  
Antiguo 13/10/2007, 12:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Upload de imágenes que funciona a medias

Puede ser el limite de memoria que tiene el script, cual es el limite que manejas?.

Saludos.
  #7 (permalink)  
Antiguo 13/10/2007, 14:18
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Re: Upload de imágenes que funciona a medias

Chaluba:
Te recomiendo este codigo para detectar el error
que esta ocurriendo de forma exacta:
<?php
$DestinoDirectorio = "/MisArchivos/ArchivosSubidos/";
$DestinoArchivo = $DestinoDirectorio . $_FILES['MiFile']['name'];
If (move_uploaded_file($_FILES['MiFile']['tmp_name'], $DestinoArchivo)) {
Echo "El Archivo Se Subio exitosamente.";
}Else{
switch($_FILES['MiFile']['error']) {
case 1 : Echo "El archivo a subir excede el tamaño especificado en el php.ini";
break;
case 2 : Echo "El archivo a subir excede del maximo de tamaño especificado por el formulario html";
break;
case 3 : Echo "El archivo se subio parcialmente y No total";
break;
case 4 : Echo "No se pudo subir el archivo";
break;
case 6 : Echo "No se encontro el directorio temporal.";
break;
case 7 : Echo "No se pudo copiar el archivo al disco duro";
break;
case 8 : Echo "Subida detenida por la extension del archivo";
break;
}
}
?>
Saludos
Y espero te ayude
Franco
  #8 (permalink)  
Antiguo 14/10/2007, 01:45
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Muy buenas. No he podido contestar antes, pero he estado realizando pruebas.

Lo primero contestar a franco190453 (y al resto, claro). He probado tu código, y claro, como se me cortaba el código, pues no podía ver el error que daba. Así que metí en una variable de sesión el tipo de error para mostrarlo arriba del todo de la página. Ahora viene lo bueno. Según esto no da error, sino que está bien. Es decir, en vez de:

Echo "El Archivo Se Subio exitosamente.";

Lo sustituí por:

$_SESSION["vererror"]="0";

Y los demás errores con:

$_SESSION["vererror"]="1"; (etc, etc)

Bueno, pues da "0". Pero se sigue cortando la página y no aparece la fotografía que, al parecer, se ha subido, y en el directorio no está. Acojonante.

Respecto a lo del límite de memoria que comenta GatorV, a tanto no llego. No sé bien a qué te refieres. Yo de PHP lo justo. ¿Puedes comentarme algo sobre cómo eso?

¿Alguna otra ocurrencia? (Muchas gracias por vuestra ayuda)
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #9 (permalink)  
Antiguo 14/10/2007, 13:11
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Re: Upload de imágenes que funciona a medias

Cita:
Iniciado por chaluba Ver Mensaje

Bueno, pues da "0". Pero se sigue cortando la página y no aparece la fotografía que, al parecer, se ha subido, y en el directorio no está. Acojonante.

Respecto a lo del límite de memoria que comenta GatorV, a tanto no llego. No sé bien a qué te refieres. Yo de PHP lo justo. ¿Puedes comentarme algo sobre cómo eso?

¿Alguna otra ocurrencia? (Muchas gracias por vuestra ayuda)
apuesto que el error es el limite de la memoria
conozco bien a arsys, el plan empresarial creo recordar que tiene un limite 12megas y con eso no es suficiente para redimensionar imagenes del tamaño que comentas, he tenido experiencia con esto en arsys

busca "memory_limit" en phpinfo()
<? echo phpinfo()?>
y veras que el limite es ridiculo

el problema es q arsys no deja trastear .htacces q es ahi donde podrias aumentarlo, si tocas ese archivo, se bloquea tu host
  #10 (permalink)  
Antiguo 15/10/2007, 10:47
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Pues puede que sea eso. Acabo de mirarlo y está a 8 megas. Voy a decirles que lo cambien, pero... ¿qué límite es aconsejable?.
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #11 (permalink)  
Antiguo 15/10/2007, 10:57
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Bueno. Ya me he puesto en contacto con soporte técnico de Arsys y les he dicho que me cambien dos parámetros del php.ini. Éstos son memory_limit y max_execution_time (por si acaso, ya que está a 30 segundos y me parece poco tiempo si se suben imágenes pesadas).

El caso es que me han comentado que memory_limit sólo se puede aumentar hasta 16 megas, y esto me parece poco, pero bueno, en cuanto realicen los cambios os comento. Muchas gracias por vuestra ayuda.
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #12 (permalink)  
Antiguo 15/10/2007, 12:06
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Re: Upload de imágenes que funciona a medias

Cita:
Iniciado por chaluba Ver Mensaje
Bueno. Ya me he puesto en contacto con soporte técnico de Arsys y les he dicho que me cambien dos parámetros del php.ini. Éstos son memory_limit y max_execution_time (por si acaso, ya que está a 30 segundos y me parece poco tiempo si se suben imágenes pesadas).

El caso es que me han comentado que memory_limit sólo se puede aumentar hasta 16 megas, y esto me parece poco, pero bueno, en cuanto realicen los cambios os comento. Muchas gracias por vuestra ayuda.
si tienes razon x defecto son 8 y no 12 como t comente
en arsys no te daran mas de 16 lo pidas como lo pidas ya me paso con un cliente.

de todas formas con 16megas ya tienes suficiente para hacer buenas redimensiones pero olvidate de redimensionar archivos muy grandes, con un poco de suerte t dara para un 50% + de lo que ya haces con 8

tambien destacar que la gran mayoria de hostings que conozco tienen por defecto entre 16 y 32 megas y cuando les solicitas ampliarlo no dicen nada incluso lo puedes hacer tu mismo desde el ftp y .htaccess
desde luego un cero para arsys espero que tengas mucha suerte con esta empresa, la necesitaras..
  #13 (permalink)  
Antiguo 16/10/2007, 10:55
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

¡¡Por fín dimos con el error!! Suntus, estabas en lo cierto. Te lo agradezco muy mucho, pero claro, aun así se queda corta la resolución que admite el server.

Memory_limit me lo han ajustado a 16 megas, y ahora soporta una subida de fotografías con una resolución máxima de 2057x1543 px, que no está nada mal, pero para usuarios que hacen fotografías con sus cámaras digitales que soportan la repera de megapíxeles es un coñazo, pues muchos usuarios no saben ajustar la resolución de fotografías antes de subirlas, y esto limita mucho el servicio.

Sinceramente, nunca había tenido problemas con Arsys. Es una empresa que me ha solucionado todo a la mayor brevedad y que ofrecen un hosting de calidad (he utilizado otros como hospedajeydominios que, la verdad, dejan mucho que desear), pero estos detalles son muy importantes a la hora de ofrecer un buen servicio, y más contratando un plan que lleva como nombre "empresarial".

Por ahora dejaremos limitada la opción a los usuarios, si acaso ofreciéndoles un pequeño tutorial de cómo ajustar la resolución y peso de las imágenes antes de subirlas para que no tengan problemas.

Ufff, ya respiro aliviado, pq el código me traía de cabeza. Muchas gracias a todos. Foros del web, siempre a la vanguardia del.... "help-desk" jejejejjeje.

Un saludo.

Pd: Ya puestos, Suntus y demás colaboradores. Esos hostings que me comentas... ¿qué tal son? ¿cuáles? ¿cómo? ¿a qué saben?
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #14 (permalink)  
Antiguo 16/10/2007, 11:00
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Por cierto, ya se me olvidaba. Digamos que un usuario no sigue las recomendaciones y sube una fotografía con una resolución que supera la debida. ¿Qué podría hacer para presentar una página de error o similar sin que se corte el código de la web y aparezca a medias por sobrepasar el memory_limit?
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #15 (permalink)  
Antiguo 16/10/2007, 11:07
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Solucionado. Si alguien supera el límite de resolución, antes de realizar el cambio, como el archivo realmente sube, leo la resolución y no realizo la transformación del archivo.

Gracias de nuevo.
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #16 (permalink)  
Antiguo 14/11/2007, 20:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 9
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Cita:
Iniciado por chaluba Ver Mensaje
Solucionado. Si alguien supera el límite de resolución, antes de realizar el cambio, como el archivo realmente sube, leo la resolución y no realizo la transformación del archivo.

Gracias .
hola buen aporte tengo un problema algo parecido hice una pagina donde hay varias celdas unas mas pequeñas con los thumb y otra mas grande para ver la foto completa todas estas guardadas en mysql , la foto grande me la redimensiona gracias a q pongo los tamaños en el img src ...... pero al actualizar la pagina esa foto grande se pixela bastante pero al pinchar la foto pequeña se arregla q sera lo q pasa????? si alguien me puede ayudar PORFAVORRR se lo agradezco. [email protected]
  #17 (permalink)  
Antiguo 15/11/2007, 14:47
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Muy buenas, Jago. Es posible que necesites actualizar las fotografías. Te comento. Yo tuve un problema con la carga de imágenes al hacer upload y tener la imagen en memoria. Con la función time() logré que se cargara la imagen real existente en el directorio. Esto te dá la hora actual en formato UNIX y hace que sólo cargue una fotografía si existen varias con el mismo nombre.

No me digas muy bien el por qué, pues no sabría explicártelo mejor, pero te comento lo que yo hice:

Código PHP:
$unique time();
echo 
"<img src='".$rutafoto."?i=".$unique."'">; 
De esta forma, se actualiza la imagen directamente de la ruta especificada. Por probar que no quede.
__________________
Selección de noticias RSS:
Motor - Negocios - Hoteles
  #18 (permalink)  
Antiguo 22/11/2007, 15:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 9
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Upload de imágenes que funciona a medias

Cita:
Iniciado por chaluba Ver Mensaje
Muy buenas, Jago. Es posible que necesites actualizar las fotografías. Te comento. Yo tuve un problema con la carga de imágenes al hacer upload y tener la imagen en memoria. Con la función time() logré que se cargara la imagen real existente en el directorio. Esto te dá la hora actual en formato UNIX y hace que sólo cargue una fotografía si existen varias con el mismo nombre.

No me digas muy bien el por qué, pues no sabría explicártelo mejor, pero te comento lo que yo hice:

Código PHP:
$unique time();
echo 
"<img src='".$rutafoto."?i=".$unique."'">; 
De esta forma, se actualiza la imagen directamente de la ruta especificada. Por probar que no quede.

Muchas gracias chaluba pero mi problema es un con una BD mysql los campos son MEDIUMBLOB subo fotos no mas halla de 300 KB mira es algo asi como la pagina www.chileautos.cl cuando se va al detalle de los vehiculos salen fotos a los lados chicas (THUMBNAILS) pero la del centro la GRANDE es la q se pixela al refrescar la pagina y se arregla cuando pincho la foto CHICA q corresponde a la grande obvio, ahora creo q si me explique bien.
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 14:02.