Foros del Web » Programando para Internet » PHP »

consulta sobre move_upload

Estas en el tema de consulta sobre move_upload en el foro de PHP en Foros del Web. Tengo un problema que me esta volviendo loco y ya no se por donde tirar. Tengo un codigo que me sube una imagen, este es ...
  #1 (permalink)  
Antiguo 09/06/2010, 10:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
consulta sobre move_upload

Tengo un problema que me esta volviendo loco y ya no se por donde tirar.
Tengo un codigo que me sube una imagen, este es el codigo.
Código PHP:
srand (time());

    
//generamos un número aleatorio
       //Preguntamos si nuetro arreglo 'archivos' fue definido
    
if (isset ($_FILES["archivos"])) {
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo
         //obtenemos la cantidad de elementos que tiene el arreglo archivos
         
$tot count($_FILES["archivos"]["name"]);
        
        
$nombre_usuario=$_GET['id'];
         
$ifile=$_FILES["archivos"];
         
          
mkdir("usuarios/".$nombre_usuario);
          
chmod("usuarios/".$nombre_usuario,0777);
         
         
         for (
$i 0$i $tot$i++){
             
             
$rnd rand(1,100000000000);
            
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo
            //para trabajar con este
             
$name $nombre_usuario."_".$rnd."_".$_FILES["archivos"]["name"][$i];
               
$tmp_name $_FILES["archivos"]["tmp_name"][$i];
               
              
$tamano $_FILES["archivos"]["size"][$i];
              
$tipo $_FILES["archivos"]["type"][$i];
              
            
$linkimagen ="usuarios/".$nombre_usuario."/".$name;
            
            
           
         if (
$tipo != "image/gif" && $tipo != "image/pjpeg" && $tipo != "image/bmp" && $tipo != "image/png" && $tipo != "image/x-png" && $tipo != "image/jpeg" && $tipo != "image/jpg") {
        echo     
$error "El archivo $name no es valido";
         
         }
        
         if (!
$error) {
             
        
            
$insertSQL="INSERT INTO galeria (idusuario, imagen) VALUES ('".$nombre_usuario."', '".$linkimagen."')";   
            
           
// $copy = copy($tmp_name1, $linkimagen);
            
move_uploaded_file($tmp_name$linkimagen);
             
//move_uploaded_file ( $_FILES [ "archivos" ][ "tmp_name" ], $linkimagen)
            
            
            
mysql_select_db($database_tengo$tengo);
            
$Result1 mysql_query($insertSQL$tengo) or die(mysql_error());
            
    
        } 
    }

Pues me crea el link en la BB.DD, pero no me sube la imagen. Los permisos en las carpetas que se crean, estan bien (777).
Ahora bien, si en vez de subir cada imagen a su respectiva carpeta coloco todas las imagenes en una sola, si me lo sube.
O sea si quito la variable $nombre_usuario de esta linea
Código PHP:
$linkimagen ="usuarios/".$nombre_usuario."/".$name
entonces si me sube la imagen.

ALguna idea de por donde puede estar el fallo?

Un saludo
  #2 (permalink)  
Antiguo 09/06/2010, 13:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta sobre move_upload

Antes de guardar en base de datos mueve el archivo:

Código PHP:
Ver original
  1. if(move_uploaded_file($temporal, $destino)) {
  2.     // Aqui insertas el registro en la base de datos
  3. } else {
  4.     // Mensaje de error
  5. }

El directorio usuarios/$nombre_usuario existe?

Que pasa cuando un archivo no pudo subirse? deberias analizar si $_FILES['archivos']['error'][$i] es cero para continuar, de lo contrario, mostrar mensaje de error.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 09/06/2010, 13:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

Hola Trybi;
El directorio archivos existe, lo que no existe es el directorio $nombre_usuario ya que lo que hago es crearlo con mkdir.
Pero antes de subir la imagen, este directorio se crea y se le otorgan los permisos 777, esto si lo hace, ya que lo he comprobado.
Por otra parte, el caso es que SI me inserta el enlace en la BB.DD correctamente.
  #4 (permalink)  
Antiguo 09/06/2010, 14:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

Pues nada, le he colocado eso, y me da el error. No llega a subir la imagen. que desesperacion con esto. :(
  #5 (permalink)  
Antiguo 09/06/2010, 14:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta sobre move_upload

$_FILES['archivos']['error'][$i] es diferente de cero? Los errores al subir archivos son:

0 => '', // No hay error, el archivo subio correctamente
1 => 'El peso del archivo es mayor del permitido en la configuración del servidor.',
2 => 'El peso del archivo es mayor del permitido en la configuración del formulario.',
3 => 'El archivo no se recibió completo..',
4 => 'No se selecciono archivo para subir.',
5 => 'Error desconocido subiendo el archivo.',
6 => 'Error del servidor: No existe un directorio temporal para subir archivos.',
7 => 'Error del servidor: Error de disco guardando el archivo subido.',
9 => 'El archivo contiene una extensión no permitida.',

O te da error al mover el archivo? Si es esto ultimo, ingresa al sitio por FTP, verifica que la carpeta exista y asigna manualmente los permisos 777. Cierto, lo ideal es poder crear las carpetas y asignar los permisos desde el script, pero primero hay que saber que es lo que falla.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 09/06/2010, 14:53
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

Me da 0, pero no me sube el archivo.
Si lo subo por ftp, si que me deja.
y las carpetas estan creadas correctamente y con los permisos 777.
  #7 (permalink)  
Antiguo 09/06/2010, 16:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta sobre move_upload

ok, entonces aqui va un par de funciones utiles para saber que pasa:

- is_dir() para ver si realmente existe el directorio (y es directorio)
- is_writable() para ver si realmente tienes permisos de escritura
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 09/06/2010, 18:46
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: consulta sobre move_upload

Estuve viendo tu codigo:

Código PHP:


<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="archivos[]">
<input type="file" name="archivos[]">
<input type="file" name="archivos[]">
<input type="submit" value="Enviar">
</form>


<?
//CREE UN NOMBRE DE USUARIO LITERAS
$nombre_usuario "user";

srand (time()); 

    
//generamos un número aleatorio 
       //Preguntamos si nuetro arreglo 'archivos' fue definido 
    
if (isset ($_FILES["archivos"])) { 
         
//de se asi, para procesar los archivos subidos al servidor solo debemos recorrerlo 
         //obtenemos la cantidad de elementos que tiene el arreglo archivos 
         
$tot count($_FILES["archivos"]["name"]); 
         
        
//$nombre_usuario=$_GET['id']; 
         
         
$ifile=$_FILES["archivos"]; 
          
          
//se crea un directorio
          
mkdir("usuarios/"); 
          
//se crea un subdirectorio
          
mkdir("usuarios/".$nombre_usuario);
           
//por defecto el directiro se crea con permisos... permisivos.
          //chmod("usuarios/".$nombre_usuario,0777);
           
          
          
          
for ($i 0$i $tot$i++){ 
                      
             
$rnd rand(1,100000000000); 
            
            
//con el indice $i, poemos obtener la propiedad que desemos de cada archivo 
            //para trabajar con este 
             
             
$name $nombre_usuario."_".$rnd."_".$_FILES["archivos"]["name"][$i]; 
               
$tmp_name $_FILES["archivos"]["tmp_name"][$i]; 
             
$tamano $_FILES["archivos"]["size"][$i]; 
             
$tipo $_FILES["archivos"]["type"][$i]; 
               
            
$linkimagen ="usuarios/".$nombre_usuario."/".$name
            
            
            echo 
$linkimagen."<br />";
             
             
        
/*  
       if (
               $tipo != "image/gif" && 
            $tipo != "image/pjpeg" && 
            $tipo != "image/bmp" && 
            $tipo != "image/png" && 
            $tipo != "image/x-png" && 
            $tipo != "image/jpeg" && 
            $tipo != "image/jpg") 
            { 
                echo     $error = "El archivo $name no es valido"; 
             }
         */ 
         
         
if (!$error) { 
         
         
             
$copy copy($tmp_name$linkimagen); 
             
            
//move_uploaded_file($tmp_name, $linkimagen); 
            //move_uploaded_file ( $_FILES [ "archivos" ][ "tmp_name" ], $linkimagen) 
             
           

            //COMENTE ESTO YA QUE ME CONCETRE EN EL UPLOAD  
            //$insertSQL="INSERT INTO galeria (idusuario, imagen) VALUES ('".$nombre_usuario."', '".$linkimagen."')";    
            //mysql_select_db($database_tengo, $tengo); 
            //$Result1 = mysql_query($insertSQL, $tengo) or die(mysql_error()); 
             
     
        
}  
    } 
}  


?>
  #9 (permalink)  
Antiguo 09/06/2010, 18:57
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: consulta sobre move_upload

Fijate en este detalle:
Y creo que ese era el problema principal, no recuerdo haber visto otro.


Código PHP:


mkdir
("usuarios/".$nombre_usuario); 

//debe ser asi:

//creas un directorio
mkdir("usuarios/"); 

//luego creas otro... dentro de usuarios
mkdir("usuarios/".$nombre_usuario); 
Lamantablemente no se si deseas que tambien hubiese varios usuario y que tambien se crearan otras carpeta dentro de usuarios (a la vez)...
Por lo pronto conjeture que es un usuario por subida.

Ah ... en el post anterior la verificacion de imagen fue comentada: la comente porque me decia error... ...descomentala y listo...


Espero que te funcione... Lo probe subiendo tres imagenes.


Saludos...!
  #10 (permalink)  
Antiguo 09/06/2010, 19:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta sobre move_upload

wiwi74, tienes razon, aunque la funcion mkdir() puede asignar los permisos y crear las carpetas en forma recursiva, ejemplo:

mkdir('usuarios/nombre-de-usuario', 0777, true);

El segundo parametro son los permisos y el tercero, si es true verifica y/o crea las carpetas y subcarpetas.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 10/06/2010, 04:47
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

He mirado lo que me has dicho Trybi, y me dice que el directorio existe, pero que no se puede escribir. EL caso es que yo miro los permisos, tanto con el mozilla ftp, con el dreamweaver y desde el mismo server y me dice que tiene todos los permisos. Si es que no puedo llegar a entenderlo.
  #12 (permalink)  
Antiguo 10/06/2010, 05:07
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

Otra cosa, ahora lo que he echo es empezar de 0, o sea quitar la carpeta usuarios y poner el codigo como dice wiwi74
Código PHP:
 mkdir("prueba/");
          
mkdir("prueba/".$id); 
y ahora no me crea ningun directorio. Y pensando, pensando... puede ser que tenga algo que configurar en el php.ini?
por que desde el programa de ftp, si puedo crear carpetas.
Otro comentario es que, de la manera que dice wiwi (esta que he colocado) no me crea ningun directorio, pero si creo a mano la carpeta "prueba" despues si que me crea la subcarpeta "$id" no se, algo raro
  #13 (permalink)  
Antiguo 10/06/2010, 06:27
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: consulta sobre move_upload

La verda que habia cosas que no sabia, como dices Triby, por no leer el manual...

Bueno pero tal como lo pegue... a mi me funciona...
Me crea los directorios y sube las imagenes... Que raro...

Prueba asi entonces...

Código PHP:

mkdir
("usuarios/".$nombre_usuario0777true); 
  #14 (permalink)  
Antiguo 10/06/2010, 08:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: consulta sobre move_upload

Por lo que alcanzo a entender, no puedes crear la carpeta "usuarios" porque la raiz del sitio no tiene permisos 777, ademas de que no los puedes asignar. Por otra parte, parece que los permisos 777 solo los puedes asignar desde FTP y no desde script.

Esto es un caso muy comun en servidores compartidos, por lo que tal vez debas almacenar todos los archivos en una misma carpeta o crearlas manualmente desde FTP.
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 10/06/2010, 09:26
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: consulta sobre move_upload

Tengo un servidor dedicado. puedo acceder al shell y modificarlo. Pero si le doy permisos 777 a la raiz, eso no me crearia un problema de seguridad?

Etiquetas: Ninguno
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 05:46.