Foros del Web » Programando para Internet » PHP »

Problemas al subir imágenes al servidor

Estas en el tema de Problemas al subir imágenes al servidor en el foro de PHP en Foros del Web. Muy buenas. A ver, tengo un problema que no sé resolver en una página que hice y que, entre otras cosas, permite subir fotos al ...
  #1 (permalink)  
Antiguo 08/01/2010, 12:03
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 10 meses
Puntos: 28
Problemas al subir imágenes al servidor

Muy buenas.

A ver, tengo un problema que no sé resolver en una página que hice y que, entre otras cosas, permite subir fotos al servidor. El problema viene dado cuando subo fotos de gran tamaño (por ejemplo, hoy he probado con una de 2.5 mb). Me da el siguiente error:

Fatal error: Out of memory (allocated 32768000) (tried to allocate 8448 bytes) in /homepages/15/d225205168/htdocs/utilImagenes.php on line 48

Cuando son fotos de 500 kb (por poner un ejemplo) suben perfectamente. Además de subir, hago una redimensión. Os pongo el código que utilizo:

Código PHP:
<?php
function redimensionar_imagen($imagen$nombre_imagen_asociada)
{
    
//establecemos los límites de ancho y alto
    
$nuevo_ancho 900;
    
$nuevo_alto 900;
    
//Recojo información de la imágen
    
$info_imagen getimagesize($imagen);
    
$alto $info_imagen[1];
    
$ancho $info_imagen[0];
    
$tipo_imagen $info_imagen[2];
    
    
//Determino las nuevas medidas en función de los límites
    
if($ancho $nuevo_ancho OR $alto $nuevo_alto)
    {
        if((
$alto $nuevo_alto) > ($ancho $nuevo_ancho))
        {
            
$nuevo_ancho round($ancho $nuevo_alto $alto,0);
        }
        else
        {
            
$nuevo_alto round($alto $nuevo_ancho $ancho,0);   
        }
    }
    else 
//si la imagen es más pequeña que los límites la dejo igual.
    
{
        
$nuevo_alto $alto;
        
$nuevo_ancho $ancho;
    }
    
    
// dependiendo del tipo de imagen tengo que usar diferentes funciones
    
switch ($tipo_imagen
    {
        case 
1//si es gif …
            
$imagen_nueva imagecreate($nuevo_ancho$nuevo_alto);
            
$imagen_vieja imagecreatefromgif($imagen);
            
//cambio de tamaño…
            
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
            
            if (!
imagegif($imagen_nueva,$nombre_imagen_asociada))
            {
                return 
false;
            }
            break;
        
        case 
2//si es jpeg …
            
$imagen_nueva imagecreatetruecolor($nuevo_ancho$nuevo_alto);
            
$imagen_vieja imagecreatefromjpeg($imagen);
            
//cambio de tamaño…
            
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
            if (!
imagejpeg($imagen_nueva,$nombre_imagen_asociada))
            {
                return 
false;
            }
            break;

        case 
3//si es png …
            
$imagen_nueva imagecreatetruecolor($nuevo_ancho$nuevo_alto);
            
$imagen_vieja imagecreatefrompng($imagen);
            
//cambio de tamaño…
            
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
            if (!
imagepng($imagen_nueva,$nombre_imagen_asociada))
            {
                return 
false;
            }
            break;
    }
    return 
true//si todo ha ido bien devuelve true
}
?>
¿Alguien sabe si estoy haciendo algo mal o si es que debo cambiar la función? El tema es que en el mismo servidor (1and1) tengo montada una tienda de oscommerce y puedo subir fotos de 2 mb sin problemas, así que descarto que sea ese el problema y me decanto por un problema de código, ¿verdad?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 08/01/2010, 12:38
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, 6 meses
Puntos: 1517
Respuesta: Problemas al subir imágenes al servidor

Primero necesitas verificar en el archivo php.ini la línea que dice:
Código Codigo:
Ver original
  1. upload_max_filesize = 2M
Esto indica que solo se pueden pasar archivos menores de 2 megas. Lo otro, parece que tu proceso está consumiento mucha memoria y puedes ver cuanta memoria usa el interprete de PHP en la línea que dice:
Código Codigo:
Ver original
  1. memory_limit = 128M
__________________
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 08/01/2010, 12:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: Problemas al subir imágenes al servidor

Revisa la directiva memory_limit:
http://www.php.net/manual/en/ini.cor...i.memory-limit

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 08/01/2010, 12:56
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 10 meses
Puntos: 28
Respuesta: Problemas al subir imágenes al servidor

Muchas gracias por responder :)

He mirado en el php.ini y he encontrado esto:

upload_max_filesize 20M
memory_limit 40M

Así que debo suponer que es un problema del consumo de memoria y no del tamaño del fichero... ¿Qué debería hacer ahora? En la directiva memory_limit leo lo siguiente: "Note that to have no memory limit, set this directive to -1". ¿Hago eso?
  #5 (permalink)  
Antiguo 08/01/2010, 12:57
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, 6 meses
Puntos: 1517
Respuesta: Problemas al subir imágenes al servidor

Lo que te indicó es que si quieres usar toda la memoria escribas -1 en vez de 40M.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: subir, servidores
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:07.