Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] clase SimpleImage y subir archivos al ftp

Estas en el tema de clase SimpleImage y subir archivos al ftp en el foro de PHP en Foros del Web. Buenas de nuevo, últimamente no paro de pedir ayuda por aquí, estoy empezando a pensar que mis cualidades como programador se están diluyendo poco a ...
  #1 (permalink)  
Antiguo 09/12/2014, 14:20
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
clase SimpleImage y subir archivos al ftp

Buenas de nuevo, últimamente no paro de pedir ayuda por aquí, estoy empezando a pensar que mis cualidades como programador se están diluyendo poco a poco, o como poco las de buscar información para solucionarme la vida yo y no marearos.

Al turrón, la clase SimpleImage seguro que todos o casi todos la conocéis, de todos modos dejo el código con las funciones que realmente uso para acortar.
Código PHP:
class SimpleImage
{
    var 
$image;
    var 
$image_type;
    function 
load($filename)
    {
        
$image_info       getimagesize($filename);
        
$this->image_type $image_info[2];
        if (
$this->image_type == IMAGETYPE_JPEG) {
            
$this->image imagecreatefromjpeg($filename);
        } elseif (
$this->image_type == IMAGETYPE_GIF) {
            
$this->image imagecreatefromgif($filename);
        } elseif (
$this->image_type == IMAGETYPE_PNG) {
            
$this->image imagecreatefrompng($filename);
        }
    }
    function 
save($filename$image_type IMAGETYPE_JPEG$compression 75$permissions null)
    {
        if (
$image_type == IMAGETYPE_JPEG) {
            
imagejpeg($this->image$filename$compression);
        } elseif (
$image_type == IMAGETYPE_GIF) {
            
imagegif($this->image$filename);
        } elseif (
$image_type == IMAGETYPE_PNG) {
            
imagepng($this->image$filename);
        }
        if (
$permissions != null) {
            
chmod($filename$permissions);
        }
    }
    function 
output($image_type IMAGETYPE_JPEG)
    {
        if (
$image_type == IMAGETYPE_JPEG) {
            
imagejpeg($this->image);
        } elseif (
$image_type == IMAGETYPE_GIF) {
            
imagegif($this->image);
        } elseif (
$image_type == IMAGETYPE_PNG) {
            
imagepng($this->image);
        }
    }
    function 
getWidth()
    {
        return 
imagesx($this->image);
    }
    function 
getHeight()
    {
        return 
imagesy($this->image);
    }
    function 
resizeToHeight($height)
    {
        
$ratio $height $this->getHeight();
        
$width $this->getWidth() * $ratio;
        
$this->resize($width$height);
    }
    function 
resize($width$height)
    {
        
$new_image imagecreatetruecolor($width$height);
        
imagecopyresampled($new_image$this->image0000$width$height$this->getWidth(), $this->getHeight());
        
$this->image $new_image;
    }

Pues bien, tengo este pequeño código, que funciona perfectamente bien tal cual
Código PHP:
$randomFileName date("d_m_Y_H_i_s")."-".rand(0,999).".".$extension;
        
move_uploaded_file($_FILES['upl']['tmp_name'], $fullPath."/".$randomFileName)) 
Pero si hago esto...
Código PHP:
        $image = new SimpleImage(); 
    
$image->load($_FILES['upl']['tmp_name']); 
    
$image->resizeToHeight(500); 
    
$image->save($_FILES['upl']['tmp_name']);
        
        
$randomFileName date("d_m_Y_H_i_s")."-".rand(0,999).".".$extension;
        
         
move_uploaded_file($_FILES['upl']['tmp_name'], $fullPath."/".$randomFileName)) 
No hay modo humano de que la funcion SAVE de la clase guarde nada en ninguna parte, y después de ver 10 clases iguales en otras webs y repositorios, ya no sé que hacer, porque no logro entender el porqué no coloca la imagen en el sitio.

Seguro que alguien ha tenido el mismo problema alguna vez y tiene más conocimientos que yo :/
  #2 (permalink)  
Antiguo 09/12/2014, 14:25
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: clase SimpleImage y subir archivos al ftp

Hola , para eso esta el foro yo también he aprendido muchísimo gracias a él! así que ánimo y pa lante! que para eso estamos!

Dicho esto , voy a decir algo quiza descabellado pero... has comprobado los permisos de la carpeta?
prueba a cambiarlos a 777 por ejemplo si usas linux o que no este el check modo de lectura de windows puesto!

Un saludo !

Suerte!
  #3 (permalink)  
Antiguo 09/12/2014, 14:45
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: clase SimpleImage y subir archivos al ftp

Hoola !!
Dudo que sean los permisos porque cuando sube la imagen sin pasar por el resizer, la funcion move_upladed_file los mueve sin problema :/
  #4 (permalink)  
Antiguo 09/12/2014, 15:25
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: clase SimpleImage y subir archivos al ftp

El caso esque tengo la misma libreria funcionando en un proyecto que hice hace poco asi que me la revisarse y ya te diré.
Un saludo!
  #5 (permalink)  
Antiguo 09/12/2014, 15:28
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: clase SimpleImage y subir archivos al ftp

Una cosa prueba save sin parametro
  #6 (permalink)  
Antiguo 09/12/2014, 16:04
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: clase SimpleImage y subir archivos al ftp

Mira, te explico una cosa para que la tengas en cuenta.

El directorio temporal al que apunta $_FILES no se puede modificar directamente desde php.

Una posible solucion es copiar la imagen a su destino y luego resamplearla.

Como te han dicho, despues de saber esto, el unico cuidado que tienes que tener es poder escribir en el directorio destino.

Estos errores son comunes, por que la carpeta temporal esta fuera del directorio de php.

Y dependiendo de la configuracion podras hacerlo o no.

En local funciona por que la configuracion es distinta que en un servidor de produccion.

Por eso desde un script php en local puedes llegar a cualquier directorio del sistema.

Si tienes alguna duda mas comenta.
__________________
http://www.roglastudios.es

Última edición por Dalam; 09/12/2014 a las 16:44
  #7 (permalink)  
Antiguo 10/12/2014, 03:16
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: clase SimpleImage y subir archivos al ftp

Buenos días.

He probado las dos soluciones que me habéis comentado, pero me pasa lo mismo.

Djoaq intenté hacerlo con save() a secas, sin meterle por parámetro el dónde quiero guardar la img, y tampoco la guarda en ninguna parte del FTP, he mirado carpeta por carpeta, por si yo que sé, apareciera la img por alguna parte, pero no.

Dalam, el tema de los permisos lo he mirado y remirado, pero entiendo que si el move_uploaded_files puede moverlo y lo mueve sin problema, la clase debería poder también no? En definitiva van al mismo sitio y si el sitio deja a uno, debe dejar al otro, vamos digo yo.

He modificado el código para que quede tal que así.
Código PHP:
//esta línea sabemos que funciona porque luego la img que subo por formulario aparece donde debe
$fileDestino $fullPath.$_FILES['upl']['name'];

//esta línea funciona porque efectivamente la img aparece en la carpeta correcta
move_uploaded_file($_FILES['upl']['tmp_name'],$fileDestino))

//doy por hecho que esta línea es correcta puesto que en otras pruebas ha funcionado y genera el nombre correctamente.
$randomFileName date("d_m_Y_H_i_s")."-".rand(0,999).".".$extension;

//creo que el problema ha de venir por alguna de las 4 siguientes líneas.
$image = new SimpleImage(); 
$image->load($fileDestino); 
$image->resizeToHeight(650); 
//he probado con save(), con output(), con save ($randomFileName), pero idéntico resultado.
$image->save($fullPath.$randomFileName);
        
//esta funcion no llega a ejecutarse nunca, por tanto entiendo que la clase por alguna parte falla y acaba con toda la ejecución el script.
alta_imagen($idVivienda$randomFileName); 
La cosa es que hasta el move_uploaded_files va bien, la img aparece en el servidor en la carpeta que toca, con el nombre original del archivo de mi ordenador, y con el mismo tamaño claro, hasta ahí normal. Pero a la que llega a las instrucciones de la clase, por ahí falla. He intentado lo que dices Dalam, era esto no? Primero mover el archivo temporal del $_FILES a la carpeta destino, y desde ahí abrirlo con la clase y hacer el resample, pero o lo estoy haciendo mal, o tampoco da resultado :/
  #8 (permalink)  
Antiguo 10/12/2014, 10:51
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: clase SimpleImage y subir archivos al ftp

Cita:
Iniciado por Djoaq Ver Mensaje
Una cosa prueba save sin parametro
Djoaq encontraste el codigo que usaste en tu proyecto y funcionaba?

He estado probando otros codigos que supuestamente tb reducen el tamaño de la img pero no logro hacer funcionar ninguno :(
  #9 (permalink)  
Antiguo 10/12/2014, 11:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: clase SimpleImage y subir archivos al ftp

Ya probaste http://image.intervention.io/ es realmente sencilla de usar
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 10/12/2014, 14:51
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: clase SimpleImage y subir archivos al ftp

Hola hhs.
No conocía intervention image no, pero seguramente es porque no trabajo con ningún framework y por lo que he visto, image intervention es una extensión para composer o laravel no?
  #11 (permalink)  
Antiguo 10/12/2014, 15:36
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: clase SimpleImage y subir archivos al ftp

Solucionado, ya me podéis matar todos...

Gurrumino para el primero que me diga qué es lo primero que se debe hacer cuando se crea un archivo externo con una clase que luego vas a utilizar en otros archivos....

Pues sí, hacer un bonito include con la ruta del archivo de la clase.

Me podéis poner puntos negativos?? Es que llevo 2 días señores peleando con esto

  #12 (permalink)  
Antiguo 11/12/2014, 09:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: clase SimpleImage y subir archivos al ftp

Cita:
Iniciado por SirZoX Ver Mensaje
Solucionado, ya me podéis matar todos...

Gurrumino para el primero que me diga qué es lo primero que se debe hacer cuando se crea un archivo externo con una clase que luego vas a utilizar en otros archivos....

Pues sí, hacer un bonito include con la ruta del archivo de la clase.

Me podéis poner puntos negativos?? Es que llevo 2 días señores peleando con esto

Lo importante es que resolviste el problema

Cita:
Hola hhs.
No conocía intervention image no, pero seguramente es porque no trabajo con ningún framework y por lo que he visto, image intervention es una extensión para composer o laravel no?
No, no es necesario utilizar laravel de echo lo menciona en la documentación. y tampoco es una extensión para composer; se instala usando composer.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: clase
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 12:02.