Foros del Web » Programando para Internet » PHP »

Fallo al intentar redimensionar una imagen....

Estas en el tema de Fallo al intentar redimensionar una imagen.... en el foro de PHP en Foros del Web. Hola muy buenas, al intentar redimensionar una imagen el servidor me devuelve este error Fatal error: Out of memory (allocated 31457280) (tried to allocate 16000 ...
  #1 (permalink)  
Antiguo 15/10/2011, 09:19
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Fallo al intentar redimensionar una imagen....

Hola muy buenas, al intentar redimensionar una imagen el servidor me devuelve este error

Fatal error: Out of memory (allocated 31457280) (tried to allocate 16000 bytes) in /homepages/15/d352575685/htdocs/Juani/redimensionar.php on line 35



os dejo el script.

Redimensionar.php
Código PHP:
<?php
function redimensionar($alto,$ancho,$destinofoto,$nombrefoto)
{
  
ini_set('memory_limit''100M');
  
$origen=$destinofoto.$nombrefoto;
  
$destino=$destinofoto."1-".$nombrefoto;
  
$destino_temporal=tempnam("Perros/","tmp");
  list(
$ancho$alto) = getimagesize($origen);
  while(
$ancho "1600" || $alto "1600")
  {
    
$ancho=$ancho/2;
    
$alto=$alto/2;
  }
  
redimensionar_jpeg($origen$destino_temporal$ancho$alto100);

  
// guardamos la imagen
  
$fp=fopen($destino,"w");
  
fputs($fp,fread(fopen($destino_temporal,"r"),filesize($destino_temporal)));
  
fclose($fp);
  
//delete($destinofoto.$nombrefoto);
  //rename($destinofoto."1-".$nombrefoto,$destinofoto.$nombrefoto);
  
unlink($destino_temporal);
  
unlink($origen);
  
rename($destino,$origen);




}

  function 
redimensionar_jpeg($img_original$img_nueva$img_nueva_anchura$img_nueva_altura$img_nueva_calidad)
  {
    
set_time_limit(300);
    
ini_set('memory_limit''100M');

    
ini_set('realpath_cache_size''10M');


      
// crear una imagen desde el original
      
$img ImageCreateFromJPEG($img_original);
      
// crear una imagen nueva
      
$thumb imagecreatetruecolor($img_nueva_anchura,$img_nueva_altura);
      
// redimensiona la imagen original copiandola en la imagen
      
ImageCopyResized($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img));
       
// guardar la nueva imagen redimensionada donde indicia $img_nueva
      
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad);
      
ImageDestroy($img);

  }


?>





Y aquí os dejo el codigo que lo llama.

Código PHP:
<?php
 set_time_limit
(300);
 
ini_set('memory_limit''20000M');
if (isset(
$_REQUEST['enviado']))
{
    include(
"conexion.php");
    include(
"redimensionar.php");
    
$query="Select * from perros where Nombre like '".$_REQUEST['Nombre']."'";
      
$result=mysql_query($query,$c1);
      
$linea=mysql_fetch_row($result);
      if(
$linea==null)
      {
             
//Linea con los datos del perro.
            //Creamos la carpeta con el nombre del perro.
            
$directorio=  "Perros/".$_REQUEST['Nombre'];
            
mkdir($directorio);

             if (!empty(
$_FILES['foto']['name']))
             {
                    
$foto=  "Perros/".$_REQUEST['Nombre']."/".$_FILES['foto']['name'];
                  
$destinofoto="Perros/".$_REQUEST['Nombre']."/";
                  
$nombrefoto=$_FILES['foto']['name'];
                  if(
copy($_FILES['foto']['tmp_name'], $foto))
                  {
                    list(
$ancho$alto) = getimagesize($foto);
                    if(
$ancho "1600" || $alto "1600")
                    {
                      
redimensionar($alto,$ancho,$destinofoto,$nombrefoto);
                    }
                       
$query="Insert into perros values('','".$_REQUEST['Nombre']."','".$_REQUEST['Nacimiento']."','".$_REQUEST['Estado']."','".$_REQUEST['Padre']."','".$_REQUEST['Madre']."','".$_REQUEST['Raza']."','".$foto."','".$_REQUEST['Sexo']."')";
                       
mysql_query($query,$c1);

                          echo
"<center><big>Los datos se han introducido correctamente.</big></center>";
                echo 
'<META http-equiv="refresh" content="3;URL=admin.php">';
                  }
                  else
                  {
                          echo
"<center><big>Los datos no se han introducido correctamente.</big></center>";
                echo 
'<META http-equiv="refresh" content="8;URL=admin.php">';
                  }

             }
             else
             {
                
$query="Insert into perros values('','".$_REQUEST['Nombre']."','".$_REQUEST['Nacimiento']."','".$_REQUEST['Estado']."','".$_REQUEST['Padre']."','".$_REQUEST['Madre']."','".$_REQUEST['Raza']."','','".$_REQUEST['Sexo']."')";
                
mysql_query($query,$c1);
                echo
"<center><big>Los datos se han introducido correctamente.</big></center>";
                echo 
'<META http-equiv="refresh" content="3;URL=admin.php">';

             }
      }
      else
      {
        echo 
"<center><h1>Ya existe un perro con ese nombre.</h1></center>";
         echo 
'<META http-equiv="refresh" content="5;URL=admin.php">';
      }
}
else
 echo 
'<META http-equiv="refresh" content="0;URL=admin.php">';
?>
  #2 (permalink)  
Antiguo 15/10/2011, 09:34
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Respuesta: Fallo al intentar redimensionar una imagen....

Si estas en TU MAQUINA LOCAL
debes entrar a tu php.ini y cambiar el SET_TIME()

PHP consume mucho con el manejo de GRAFICOS.
  #3 (permalink)  
Antiguo 15/10/2011, 11:03
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Fallo al intentar redimensionar una imagen....

Es verdad que consume recursos, pero que tiene que ver con SET_TIME() ? No es set_time_limit ?

Para arreglar eso tienes que incrementar la memoria permitida desde el php.ini directamente, buscando memory_limit, si no puedes intentando desde PHP:

Código PHP:
Ver original
  1. ini_set(&#8217;memory_limit’, ‘32M’);

sino desde .htaccess

Código Apache:
Ver original
  1. php_value memory_limit 32M

PD: Ya veo que lo tienes incrementalo más o no permitas imágenes muy grandes.

Espero que te sirva. Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 15/10/2011 a las 11:10
  #4 (permalink)  
Antiguo 15/10/2011, 15:23
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Fallo al intentar redimensionar una imagen....

En local me funciona estupendamente, lo malo es en el servidor donde lo tengo alojado. es un servidor de 1&1, creo que es un server windows, no estoy seguro, y no tengo acceso a php.ini, se podría intentar con los ini_set, pero no se cual poner, como veis ya tengo algunos puestos.

Y sobre lo del .htaccess no puedo colgar ese archivo en el servidor, cada vez que cuelgo alguno, me salta error 500 :P

Un saludo y a ver si alguien me puede dar alguna ideilla más, la imagen que intento subir es de unos 3 megas, de una camara digital normal y corriente, y lo que quiero es ke como maximo me la deje en 1800x1800, así poder mostrarlas de manera "agil" en una galería flash :P

Si quereis ver como va, podeis probar un poco,

el info(); lo teneis en
www.puertodelepe.es/juani/info.php

www.puertodelepe.es/juani, sería la web, y donde podeis ver el funcionamiento con
www.puertodelepe.es/juani/admin.php

los datos de acceso momentaneos son:
usuario javi
pass 12345


bueno un saludo y gracias. ;)

Última edición por JaV1; 15/10/2011 a las 15:29
  #5 (permalink)  
Antiguo 15/10/2011, 20:24
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Respuesta: Fallo al intentar redimensionar una imagen....

Cita:
Iniciado por JaV1 Ver Mensaje
En local me funciona estupendamente
Ah!, entonces tu PHP esta buenito...

Ya es un tema de tu server.

Cita:
Iniciado por JaV1 Ver Mensaje
creo que es un server windows
Lee tu file:

Linux infong 2.4 #1 SMP Mon Mar 28 07:20:50 UTC 2011 i686 GNU/Linux

SI, es la que tu dices:

pero que tiene que ver con SET_TIME() ? No es set_time_limit ?

Debes crear un php.ini y agregarle:

set_time_limit con tu valor apropiado

Alá!
  #6 (permalink)  
Antiguo 16/10/2011, 04:47
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Fallo al intentar redimensionar una imagen....

bueno, ahora cambiando l limite llega a un paso mas adelante...

Fatal error: Call to undefined function imagecreatefromjpeg() in /homepages/15/d352575685/htdocs/Juani/redimensionar.php on line 46

Ahor se que es por el tema de la libreria GD....

pero no se como instalarla en el servidor.



EDITO en mi info viene esto

gd
GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.2.1
GIF Read Support enabled
GIF Create Support enabled
PNG Support enabled
libPNG Version 1.2.15beta5
WBMP Support enabled
XBM Support enabled

Directive Local Value Master Value
gd.jpeg_ignore_warning 0 0

me está tocando las pel.... el servidor ehhhhhhhh

Última edición por JaV1; 16/10/2011 a las 04:54 Razón: edito en mi info viene esto
  #7 (permalink)  
Antiguo 16/10/2011, 11:31
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Respuesta: Fallo al intentar redimensionar una imagen....

Si tienes acceso al server: reinicia apache, o el server completo !
  #8 (permalink)  
Antiguo 16/10/2011, 14:16
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Fallo al intentar redimensionar una imagen....

no tengo acceso a nada de eso... :S
  #9 (permalink)  
Antiguo 16/10/2011, 16:53
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Respuesta: Fallo al intentar redimensionar una imagen....

Corre esta linea en el servidor REMOTO:
Código PHP:
            print_r(get_extension_funcs('gd')); 
  #10 (permalink)  
Antiguo 17/10/2011, 05:34
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Fallo al intentar redimensionar una imagen....

me devolvió un array con lo siguiente :

Array ( [0] => gd_info [1] => imagearc [2] => imageellipse [3] => imagechar [4] => imagecharup [5] => imagecolorat [6] => imagecolorallocate [7] => imagepalettecopy [8] => imagecreatefromstring [9] => imagecolorclosest [10] => imagecolorclosesthwb [11] => imagecolordeallocate [12] => imagecolorresolve [13] => imagecolorexact [14] => imagecolorset [15] => imagecolortransparent [16] => imagecolorstotal [17] => imagecolorsforindex [18] => imagecopy [19] => imagecopymerge [20] => imagecopymergegray [21] => imagecopyresized [22] => imagecreate [23] => imagecreatetruecolor [24] => imageistruecolor [25] => imagetruecolortopalette [26] => imagesetthickness [27] => imagefilledarc [28] => imagefilledellipse [29] => imagealphablending [30] => imagesavealpha [31] => imagecolorallocatealpha [32] => imagecolorresolvealpha [33] => imagecolorclosestalpha [34] => imagecolorexactalpha [35] => imagecopyresampled [36] => imagerotate [37] => imageantialias [38] => imagesettile [39] => imagesetbrush [40] => imagesetstyle [41] => imagecreatefrompng [42] => imagecreatefromgif [43] => imagecreatefromwbmp [44] => imagecreatefromxbm [45] => imagecreatefromgd [46] => imagecreatefromgd2 [47] => imagecreatefromgd2part [48] => imagepng [49] => imagegif [50] => imagewbmp [51] => imagegd [52] => imagegd2 [53] => imagedestroy [54] => imagegammacorrect [55] => imagefill [56] => imagefilledpolygon [57] => imagefilledrectangle [58] => imagefilltoborder [59] => imagefontwidth [60] => imagefontheight [61] => imageinterlace [62] => imageline [63] => imageloadfont [64] => imagepolygon [65] => imagerectangle [66] => imagesetpixel [67] => imagestring [68] => imagestringup [69] => imagesx [70] => imagesy [71] => imagedashedline [72] => imagettfbbox [73] => imagettftext [74] => imageftbbox [75] => imagefttext [76] => imagetypes [77] => png2wbmp [78] => image2wbmp [79] => imagelayereffect [80] => imagexbm [81] => imagecolormatch [82] => imagefilter [83] => imageconvolution )


y no veo esa funcion, cual podría usar para reemplazarla???

Siento mucho el pelmazo anarko, pero es que es el toque final del proyecto.

Un saludo y muchas gracias.
  #11 (permalink)  
Antiguo 17/10/2011, 06:48
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Respuesta: Fallo al intentar redimensionar una imagen....

Eso quiere decir que la libreria GD esta en su server pero SIN soporte JPG.

Lo que te dan el servicio deben RECOMPILAR PHP

Muy ectraño.. Ya estamos en finales de 2011 !!!

(Si tu proyecto es de UNIVERSIDAD, o similar enviame un MP)
  #12 (permalink)  
Antiguo 21/10/2011, 06:56
 
Fecha de Ingreso: noviembre-2010
Ubicación: Lepe
Mensajes: 23
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Fallo al intentar redimensionar una imagen....

compañero, el proyecto es personal es para mi novia y mi suegra.
Que quieren montar un criadero de perrillos, y les hice el menu de administracion para que ellas mismas pudieran subir las fotos.

Un saludo y muchas gracias.

PD: No m deja enviarte MP un saludo

Etiquetas: fallo, mysql, redimensionar
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 07:24.