[SOLUCIONADO] Problemas subiendo imagenes redimensionadas (imagecreatefromjpeg)

Hola!
Tengo el siguiente código funcionando sin problemas en servidores Windows.
El problema me surge al subirlo en servidores Linux.
Supongo que es un problema de permisos, y con respecto al upload, lo único que encontré fue este hilo http://comunidad.siu.edu.ar/index.php?topic=3027.0, al cual no tengo permisos para acceder por lo que no sé si a alguien más le sucedió y como pudo solucionarlo.

Código que sube la imagen:

<?php...
	function evt__formulario__aplicar($datos)
	{...
			if (is_array($datos['comprobante_imagen']) || !empty($datos['comprobante_imagen']['name'])) {
				//Se subio una imagen
				$temp_archivo = $datos['comprobante_imagen']['tmp_name'];
				manipulacion_imagenes::redimensionar_imagen($temp_archivo, $datos['comprobante_imagen']['name'], 400);
				$imagen = fopen($temp_archivo['path'], 'rb');
				$this->dep('movimientos')->set_blob('comprobante_imagen', $imagen);
			}
			$this->dep('movimientos')->sincronizar();
	...}

Código que produce el error en Linux:

<?php...
	function redimensionar_imagen(&$archivo=null, $nombre=null, $dim_max_px=200)
	{
		$archivo = strtolower($archivo);
		$img = imagecreatefromjpeg($archivo);
		$dimensiones = getimagesize($archivo);
		$wAux		 = $dimensiones[0];
		$hAux		 = $dimensiones[1];
		if ($wAux > $hAux) {
			$escala = $dim_max_px / $wAux;
		} else {
			$escala = $dim_max_px / $hAux;
		}
		$w      = round($wAux * $escala);
		$h      = round($hAux * $escala);
		$imagen	= imagecreatetruecolor($w, $h);
		imagecopyresampled($imagen, $img, 0, 0, 0, 0, $w, $h, $wAux, $hAux);
		ob_start();
		imagejpeg($imagen);
		$imagen = ob_get_contents();
		ob_end_clean();
		$temp_nombre = md5(uniqid(time()));
		$archivo_nuevo = toba::proyecto()->get_www_temp($temp_nombre);
		$temp_imagen = fopen($archivo_nuevo['path'], 'wb');
		fwrite($temp_imagen, $imagen);
		fclose($temp_imagen);
		$archivo = $archivo_nuevo;
		return null;
	}

Errores que se muestran en el servidor:

Warning: imagecreatefromjpeg(/tmp/phpqfofcx) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 12

Warning: getimagesize(/tmp/phpqfofcx) [function.getimagesize]: failed to open stream: No such file or directory in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 21

Warning: Division by zero in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 27

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 31

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 32

Warning: fopen(/) [function.fopen]: failed to open stream: Is a directory in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 55

Warning: fwrite(): supplied argument is not a valid stream resource in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 56

Warning: fclose(): supplied argument is not a valid stream resource in /toba_1.5.0/proyectos/miproyecto/php/recursos/manipulacion_imagenes.php on line 57

Cabe aclarar que ya se probó con lo siguiente:

  • poner los permisos en 777 para la carpeta /tmp
  • cambiar la carpeta de upload en el php ini a toba_1.5.0/temp, y darle permisos 777

Desde ya, mil gracias por cualquier idea que pueda ocurrirseles.

A alguno le ha pasado esto? han podido solucionarlo?

Hola Martin,

te hago una consulta, veo que al principio del metodo redimensionar_imagen tenes la siguiente linea:


$archivo = strtolower($archivo);

Tene en cuenta que Linux es case sensitive, si te llega un nombre con alguna letra mayuscula (que es probable por el random) y lo cambias… no va a encontrar el archivo.

Saludos

En realidad, esa línea la agregué luego por si el problema venía por ahí. En Windows anda bien.
Por lo que puede ser algo por ese lado.
Probaré forzando las minúsculas previamente, antes de llamar a la función de redimensión, cuando se crea el nombre temporal.

Eliminé esa línea y varía en lo que el error del archivo TMP/… aparece en mayúsculas.
Tené en cuenta que esto lo hago cuando quiero agregar una foto. $archivos, fijate que trae el contenido del ef_upload.
El archivo lo subo desde un windows… probé con el nombre original del archivo todo en minúsculas, y probé sacando los espacios dentro del nombre… El error obtenido es similar…

Warning: imagecreatefromjpeg(/TOBA_1.5.0/TEMP/PHP21I1WT) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 13

Warning: getimagesize(/TOBA_1.5.0/TEMP/PHP21I1WT) [function.getimagesize]: failed to open stream: No such file or directory in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 22

Warning: Division by zero in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 28

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 32

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /toba_1.5.0/proyectos/unrn_pagos/php/recursos/manipulacion_imagenes.php on line 33

Ah, cabe aclarar que cambiamos la carpeta temporal php, por /toba_1.5.0/temp, y le dimos todos los permisos necesarios… este cambio los hicimos en uno de los tantos intentos de sacarlo andando…

Si te sirve el dato, el proceso, se completa sin problemas (es decir, la base de datos es actualizada, pero con un archivo de 0kb y el resto de los datos). Cuando quiero acceder a revisar ese registro, me muestra que “tiene” imagen (ninguna en realidad), de 0k, y me intenta dejar cambiarla.

Encontré el error, yo estaba pasando los datos capturados del formulario a mayúsculas previo a la carga de la imagen.
Me ayudó la idea que me pasaste Richard sobre el strlower… me dío la punta del ovillo para la investigación.
Había otro hilo en la comunidad que indicaba algo similar y pareciera que debía resolverlo por permisos de linux, o en la web, por inconsistencias de la función…
Pero no… jeje… era un tema del virus que se encuentra entre el teclado y la silla :stuck_out_tongue:

Me alegro que lo hayas podido solucionar Martin, en gral el tema de permisos en los linux suele ser una causante comun para quien se inicia en su uso, sin embargo en tu caso el problema debia pasar por otro lado, ya que si mal no recuerdo le habias dado permisos hasta para lanzar un tomahawk en Indiana XD.

Saludos