A ver si alguien me ayuda, lo que me pasa es rarísimo. Tengo una aplicación para subir imágenes. Cuando se sube la imagen, ésta se reduce a un tamaño estándar para que no se vayan de madre, y se hace un thumbnail automáticamente. En mi servidor local que tengo montado en mi PC, me va perfectamente. Son funciones que he usado muchas veces. Pero cuando lo cuelgo en Arsys me da problemas.
He ido depurando y al final he visto que la línea en la que falla es:
$original = imagecreatefromjpeg($img_original);
He ido más allá: si subo una imágen de unos 100K, todo funciona perféctamente. Si la imagen pesa 300 y algo, esa línea me falla.
En phpinfo figura que puedo subir imágenes de hasta 8 megas, y el tiempo máximo de respuesta son 60 segundos, tiempo más que de sobra para subirme la imagen de 300 k (la sube en 20 segundos, así que eso no es).
¿Puede ser que tengan capada de alguna manera la librería GD en caso de que la imagen a cambiar de tamaño sea "pesada" (¡¡pero dónde se ha visto que 300 K sea mucho!!)? ¿Puedo burlar ese problema de alguna manera?
Os dejo con la función que cambia de tamaño y copia en la carpeta /images las imágenes que subo. Está un poco chapucera de tanta prueba y tanto cambio que he ido haciendo, pero creo que se entiende bien.
Código PHP:
ins_img($imagen,$ID,"galeria","imagen",&$nombre_imagen,&$dest);
//devuelve $nombre_imagen con el nombre de la imagen.
//le metemos la imagen que acabamos de subir, ID y tabla para crear el nombre del archivo que se guardará en la carpeta images. image_name y dest se devuelven.
function ins_img($image,$ID,$tabla,$nombre_campo,$image_name,$dest)
{
if ($image && $image != "")
{
global $basedir,$baseurl;
$image_name = "/images/".$ID."_".$tabla."_".$nombre_campo;
$output = getimagesize($image);
if($output[2]==1)$image_type="image/gif";
elseif($output[2]==2)$image_type="image/jpeg";
elseif($output[2]==3)$image_type="image/png";
switch ($image_type)
{
case "image/gif":
$image_name = $image_name.".gif";
break;
case "image/jpeg":
$image_name = $image_name.".jpg";
break;
case "image/png":
$image_name = $image_name.".png";
break;
case "image/bmp":
$image_name = $image_name.".bmp";
break;
default:
Print "ATENCIÓN: Tipo de archivo inválido como imágen<br>";
}
//////////////
global $ancho_maximo, $alto_maximo;
// obtener datos de la fotografia
$img_original = $image;
$info_original = getimagesize($img_original);
$anchura_original = $info_original[0];
$altura_original = $info_original[1];
// crear imagen desde el original
$original = ImageCreateFromJPEG($img_original); [B]//AQUI FALLA[/B]
ImageAlphaBlending($original, true);
$ratio = 1; //iniciamos a 1.
if ($info_original[0] > $ancho_maximo) //Si es más ancha que el máximo, calcular el ratio: (actual*X = ancho_maximo)
{
$ratio = $ancho_maximo/$info_original[0];
}
if ($info_original[1]*$ratio > $alto_maximo)
{
$ratio = $alto_maximo/$info_original[1];
}
$anchura = round($ratio*$info_original[0]);
$altura = round($ratio*$info_original[1]);
$imagen_final = imagecreatetruecolor($anchura,$altura);
// con esta función la reescalamos
imagecopyresampled ($imagen_final, $original, 0, 0, 0, 0, $anchura, $altura, $info_original[0], $info_original[1]);
//Cogido de ins_img
$dest = $basedir.$image_name;
// guardar la nueva imagen
ImageJPEG($imagen_final, $dest, 100);
// cerrar las imágenes
ImageDestroy($original);
///////////////////
//$dest = $basedir.$image_name;
//copy($image,$dest);
}
}
www.ebaycontraelmonstruo.es/ebaysummer/
El error que da es "Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request".
Repito que este mismo error no me lo da si la imagen pesa, por ejemplo, unos 100 K.
Podéis ver la info del servidor en http://www.ebaycontraelmonstruo.es/info.php
Gracias mil!!!!
Rasgon