Foros del Web » Programando para Internet » PHP »

Upload de imagenes con PHP

Estas en el tema de Upload de imagenes con PHP en el foro de PHP en Foros del Web. Hola en una web que en el server local me funciona OK me falla el upload de fotos. Por lo visto en el error veo ...
  #1 (permalink)  
Antiguo 24/01/2010, 05:38
 
Fecha de Ingreso: abril-2002
Mensajes: 186
Antigüedad: 22 años
Puntos: 2
Upload de imagenes con PHP

Hola en una web que en el server local me funciona OK me falla el upload de fotos.
Por lo visto en el error veo que el problema es que no llega a subir la foto al directorio temporal y por tanto el error lo da al intentar mover el fichero.
Como dije en el título todo funciona bien en mi server de desarrollo bajo Windows pero me falla en el servidor de explotación (hosting).


Este es el error
Warning: move_uploaded_file(imagesTemp/47.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/s10d225e/public_html/catalogo.php on line 390

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpMl33Bc' to 'imagesTemp/47.jpg' in /home/s10d225e/public_html/catalogo.php on line 390


Gracias de antemano.
Un saludo.


Función para redimensionar fotos

Código PHP:
function redimensionar($type$img_original$img_nueva$img_nueva_anchura$img_nueva_altura$img_nueva_calidad


    
$defecto 'img/defecto.jpg'

    if(
file_exists($img_original)) 
    { 

        
// crear imagen desde original 
        
$type=strtolower($type); 
        switch(
$type
        { 
            case 
'jpeg':    $img ImageCreateFromJPEG($img_original); break; 
            case 
'jpg':     $img ImageCreateFromJPEG($img_original); break; 
            case 
'png':     $img ImageCreateFromPNG($img_original); breaK; 
            case 
'gif':     $img ImageCreateFromGIF($img_original); breaK; 
            case 
'wbmp':    $img ImageCreateFromWBMP($img_original); break; 
            default:        
$img ImageCreateFromJPEG($defecto);    break; 
        } 

    }
    else 
    { 
            
$img ImageCreateFromJPEG($defecto);  
    }


    if(!empty(
$img)) 
    { 


            
$new_w_R ImageSX($img); 
            
$new_h_R ImageSY($img); 

            
//$img_nueva_altura = 50; 


            // se calcula la relación alto/ancho 
            
$aspect_ratio $new_h_R/$new_w_R

            
// se ajusta al nuevo tamaño 
            
$img_nueva_altura abs($img_nueva_anchura $aspect_ratio); 

            
// crear imagen nueva 
            
$thumb ImageCreateTrueColor($img_nueva_anchura,$img_nueva_altura); 

            
// redimensionar imagen original copiandola en la imagen. La imagen se reajustará al nuevo tamaño 
            
ImageCopyResampled($thumb,$img,0,0,0,0,$img_nueva_anchura,$img_nueva_altura,ImageSX($img),ImageSY($img)); 

            
// guardar la imagen redimensionada donde indica $img_nueva 
            
ImageJPEG($thumb,$img_nueva,$img_nueva_calidad); 
            global 
$fotoFinal;
            
$fotoFinal=$img_nueva;
        }



Código que me da el error
catalogo.php
Código PHP:
            //upload
            
if( $HTTP_POST_FILES['Foto']['name'])//comprueba si se ha puesto foto
            
{

                
//tomo el valor de un elemento de tipo texto del formulario 
                //$cadenatexto = $_POST["cadenatexto"]; 
                //echo "<p>Empezamos con el upload</p>"; 
                
                //datos del arhivo 
                
$nombre_archivo $HTTP_POST_FILES['Foto']['name']; 
                
//echo "nombre $nombre_archivo";
                
$tipo_archivo =$HTTP_POST_FILES['Foto']['type']; 
                
//echo "--typo $tipo_archivo";
                
$tamano_archivo $HTTP_POST_FILES['Foto']['size']; 
                
//echo "--tamaño $tamano_archivo";
                //compruebo si las características del archivo son las que deseo 
                
if (!( strpos($tipo_archivo"jpeg")) && ($tamano_archivo 300000))
                { 
                    echo 
"<p>La extensión o el tamaño de los archivos no es correcta. <br>
                    Solo se permiten archivos .jpg<br>
                    Se permiten archivos de 1Mb  máximo.</p>"

                }
                else
                { 
                    if (
move_uploaded_file($HTTP_POST_FILES['Foto']['tmp_name'], "imagesTemp/$_POST[Id].jpg")){ 
                       echo 
"<p>La foto ha sido cargada correctamente.</p>";
                       
                       
//redimensionamos la foto
                       
if(file_exists("imagesTemp/$_POST[Id].jpg"))
                       {
                               
mensaje("la foto imagesTemp/$_POST[Id].jpg si que existe en el temporal");
                       }
                        
redimensionar("jpg","imagesTemp/$_POST[Id].jpg","imagenescatalogo/familia-led-p$_POST[Id].jpg",150,150,100);
                        if(
file_exists("imagesTemp/$_POST[Id].jpg"))
                        {
                            
unlink("imagesTemp/$_POST[Id].jpg");
                        }
                       
//FINredimensionamos la foto
                       
                    
}else
                    { 
                       echo 
"<p>Ocurrió algún error al subir la foto. No pudo guardarse.</p>"
                    }
                }
                
            }
            
//FIN upload 
  #2 (permalink)  
Antiguo 24/01/2010, 07:05
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Upload de imagenes con PHP

Prueba a cambiar $HTTP_POST_FILES por $_FILES

Tambien podrias comprobar que sea un fichero subido correcto antes de moverlo. mirate la funcion is_uploaded_file para saber como trabaja.

Otra cosa, el directorio donde quieres mover la imagen, tienes permisos de escritura?

saludos
  #3 (permalink)  
Antiguo 24/01/2010, 09:41
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: Upload de imagenes con PHP

eso mismo le iba a preguntar. recuerda que la propiedad $HTTP_POST_FILES ya no es valida a partir de la version de php4 para adelante. que servicio utilizas para ejecutar tus aplicaciones web localmente ?.

appserv, wamp, xamp o solamente has instalado el apache, php y mysql.

por otro lado, comprueba que tu carpeta exista y que tenga permisos de escritura. si estas utilizando un ftp como el cuteftp o el flashfxp, solo debes darle permisos de escritura a tu carpeta.

Código PHP:
Ver original
  1. //upload
  2.             if( $_FILES['Foto']['name'])//comprueba si se ha puesto foto
  3.             {
  4.  
  5.                 //tomo el valor de un elemento de tipo texto del formulario
  6.                 //$cadenatexto = $_POST["cadenatexto"];
  7.                 //echo "<p>Empezamos con el upload</p>";
  8.                
  9.                 //datos del arhivo
  10.                 $nombre_archivo = $_FILES['Foto']['name'];
  11.                 //echo "nombre $nombre_archivo";
  12.                 $tipo_archivo =$_FILES['Foto']['type'];
  13.                 //echo "--typo $tipo_archivo";
  14.                 $tamano_archivo = $_FILES['Foto']['size'];
  15.                 //echo "--tamaño $tamano_archivo";
  16.                 //compruebo si las características del archivo son las que deseo
  17.                 if (!( strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 300000))
  18.                 {
  19.                     echo "<p>La extensión o el tamaño de los archivos no es correcta. <br>
  20.                    Solo se permiten archivos .jpg<br>
  21.                    Se permiten archivos de 1Mb  máximo.</p>";
  22.                 }
  23.                 else
  24.                 {
  25.                     if (move_uploaded_file($_FILES['Foto']['tmp_name'], "imagesTemp/$_POST[Id].jpg")){
  26.                        echo "<p>La foto ha sido cargada correctamente.</p>";
  27.                        
  28.                        //redimensionamos la foto
  29.                        if(file_exists("imagesTemp/$_POST[Id].jpg"))
  30.                        {
  31.                                mensaje("la foto imagesTemp/$_POST[Id].jpg si que existe en el temporal");
  32.                        }
  33.                         redimensionar("jpg","imagesTemp/$_POST[Id].jpg","imagenescatalogo/familia-led-p$_POST[Id].jpg",150,150,100);
  34.                         if(file_exists("imagesTemp/$_POST[Id].jpg"))
  35.                         {
  36.                             unlink("imagesTemp/$_POST[Id].jpg");
  37.                         }
  38.                        //FINredimensionamos la foto
  39.                        
  40.                     }else
  41.                     {
  42.                        echo "<p>Ocurrió algún error al subir la foto. No pudo guardarse.</p>";
  43.                     }
  44.                 }
  45.                
  46.             }
  47.             //FIN upload

saludos.
  #4 (permalink)  
Antiguo 24/01/2010, 10:50
 
Fecha de Ingreso: abril-2002
Mensajes: 186
Antigüedad: 22 años
Puntos: 2
Respuesta: Upload de imagenes con PHP

Hola gracias a los dos por responder.
Lo de $_FILES ya lo he cambiado y sigue haciendo lo mismo.
Quiero comprobar cual es la carpeta temporal donde se deberian de subir las fotos pero en el phpinfo() me aparece lo siguiente

upload_max_filesize 2M 2M
upload_tmp_dir no value no value
user_dir no value no value

Por tanto no se cual es el directorio temporal para darle permisos 777 ¿Alguien me lo podría decir como averiguarlo?
Yo uso como server local mowes portable que es parecido a wammpserver y demás pero este mismo código lo tengo en un hosting de byethost (en EEUU) y me funciona bien.
Por cierto mi versión de PHP es la 5.2.12
Bueno gracias de nuevo y seguiré buscando a ver do encuentro la solución.
  #5 (permalink)  
Antiguo 24/01/2010, 11:47
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: Upload de imagenes con PHP

bueno. 3 preguntas:

1. estas utilizando un hosting gratuito ?. ya que si estas utilizando un servicio gratuito, no te funcionara para subir imagenes (es pienso yo). si es de paga tu hosting, bueno obiamente funcionaria tu aplicacion.

2. cuando mostraste en tu phpinfo, te muestra los resultados:

Código PHP:
Ver original
  1. upload_max_filesize 2M 2M
  2. upload_tmp_dir no value no value
  3. user_dir no value no value

eso es del hosting no ?. si es asi donde dice la linea upload_max_filesize 2M, significa que puedes subir imagenes de 100, 200, 400, 500KB hasta 2MB como maximo.

ya que mostraste el phpinfo() de tu hosting, tendrias que buscar la linea donde se guarda los temporales. si estas utilizando internet explorer o firefox, bueno solamente debes buscar la palabra temp y donde se esta almacenando los temporales.

como te mencione antes, existe tu carpeta donde almacenas tus imagenes ?.

si no existe o no lo has creado tu carpeta, obiamente te saldra ese error del

Warning: move_uploaded_file(imagesTemp/47.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/s10d225e/public_html/catalogo.php on line 390

fijate si existe esa carpeta.

3. cuando subes tus archivos por via ftp, que software para la tranferencia de archivos estas utilizando. si usas cuteftp o flashfxp, solamente entras al public_html/imagesTemp y le das clic derecho a la carpeta y debes darle clic en atributes y darle permisos de escritura 777.

en tu codigo que colocas la siguiente condicion.

Código PHP:
Ver original
  1. //redimensionamos la foto
  2. if(file_exists("imagesTemp/$_POST[Id].jpg"))
  3. {
  4. mensaje("la foto imagesTemp/$_POST[Id].jpg si que existe en el temporal");
  5. }

alli le estas preguntando si existe la imagen o la carpeta.

bueno. en mi opinion, yo no le doy mucha prioridad a los temporales. solo creo una carpeta para subir mis imagenes, subo mi aplicacion via ftp, dentro del ftp le doy los permisos a la carpeta y listo.

si tienes dudas, hasnolo saber.

saludos.

Última edición por esaenz22; 24/01/2010 a las 11:48 Razón: correccion.
  #6 (permalink)  
Antiguo 24/01/2010, 12:29
 
Fecha de Ingreso: abril-2002
Mensajes: 186
Antigüedad: 22 años
Puntos: 2
Respuesta: Upload de imagenes con PHP

Ya encontre el problema.
Menudo fallo de 1º.
Siento haberos hecho perder el tiempo y tambien haber perdido todo el domingo con esta tontería
Resulta que como el server de desarro es Windows y el hosting es linux el de windows no distingue entre mayúsculas y minúsculas mientras que linux si.
En resumen la carpeta "imagesTemp" realmente y por una extrañisima razón estaba como "imagesTemP" (no me pregunteis porque la ultima P esta en mayusculas porque no lo se ...)
El caso es que había comprobado los nombres de las carpetas pero no me di cuenta...
Buenos gracias a todos de nuevo y un saludo.
  #7 (permalink)  
Antiguo 24/01/2010, 13:26
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: Upload de imagenes con PHP

pues que bueno que hayas solucionado tu problema.

no sabia que linux es case sensitive (sensible a mayusculas y minusculas).

cuando crees una nueva carpeta, no escribas el nombre de tu carpeta en mayusculas. trata de que sea equitativo.

saludos.

Etiquetas: imagenes, upload
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 08:50.