Foros del Web » Programando para Internet » PHP »

problema con nombre de directorio con acento

Estas en el tema de problema con nombre de directorio con acento en el foro de PHP en Foros del Web. hola. a ver, tengo la siguiente aplicación mediante la cual, un usuario, al registrarse en la aplicación, automáticamente se crea una carpeta o directorio en ...
  #1 (permalink)  
Antiguo 16/03/2007, 06:48
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
problema con nombre de directorio con acento

hola. a ver, tengo la siguiente aplicación mediante la cual, un usuario, al registrarse en la aplicación, automáticamente se crea una carpeta o directorio en el servidor con su nombre, y a esta carpeta le asigno permisos 0777.
el código que uso para procesar el formulario de registro, cuyos campos son nombre, apellidos, empresa, email y password, es este:
Código PHP:
$cnx mysql_connect("servidor""user""pass");   
mysql_select_db("basededatos"$cnx);  
$nombre=$_POST['nombre'];  
$apellidos=$_POST['apellidos'];  
$empresa=$_POST['empresa'];  
$email=$_POST['email'];  
$password=$_POST['password'];  

/////con este código compruebo si el usuario o el email ya existen  
$cnx mysql_query("select count(*)  from tabladelabase where nombre='$nombre' or email='$email'");    
    if(
mysql_result($cnx,0)) {    
        echo 
'El usuario ya existe en la base de datos o ya está registrado el email. Haz click <a href="javascript:history.back()">aquí</a> para regresar.' ; die();    
    } else {    
        
$password md5(md5($_POST["password"]));    
      
////creo el directorio  
if(!file_exists($DESTINO)) //comprobamos que existe o no el directorio  
{   
///creo la carpeta con ese nombre y doy los permisos que quiero  
     
$DESTINO="$nombre";  
      
mkdir($DESTINO,0777);    
}       

////por último, introducimos en la tabla de la base de datos los campos  
 
mysql_query("INSERT INTO tabladelabase (nombre,apellidos,empresa,email,password) VALUES('$nombre','$apellidos','$empresa','$email','$password')");  

////hecho esto, envío un email al usuario con sus datos de acceso.  
         
mail($email,"Ya estás registrado!","Hola, $nombre $apellidos!\n\nHa sido registrado!\n\nSu nombre de usuario es: $nombre\nSu contraseña es: ".$_POST["password"]."\n\nPuedes ingresar mediante el siguiente link: http://www.miweb.com/login\n\nGracias por registrarte!\nExitos","From: <[email protected]>\r\n");   
             

        echo 
'Has sido registrad@. Haz click aquí <a href="index.php">aquí</a> para regresar a la página principal.'; die();    
   } 
hecho esto, y creado ese directorio, el usuario puede acceder mediante un panel a su área (directorio creado) comprobando previamente su nombre de usuario y password. una vez validado esos dos conceptos, el usuario puede subir archivos mediante un formulario y los archivos subidos se almacenan en su carpeta o directorio. a su vez, se registran en una tabla de una base de datos, con los campos resumen, que recoge una breve descripción del documento subido y documento, que recoge la ruta que tiene el archivo en el servidor. para procesar esto lo hago así:
Código PHP:
session_start(); 
$_SESSION['nombre']=$nombre
$_SESSION['apellidos']=$apellidos
$cnx mysql_connect("localhost""user""pass");  
mysql_select_db("basededatos"$cnx);   

if(
$_post['archivo']="")  
   {  
      
$ruta="no imagen"   
      
$error=false;   
   }  
else  
   {   
        
$error=false;  
   if(
$_FILES['archivo']['name'])   
 {   
 
$local $_FILES['archivo']['name'];   
 
$remoto $_FILES['archivo']['tmp_name'];   
 
$extension explode("."$local);   
$n count($extension)-1;   
 
$miext = array('doc''xls''ppt''pps''jpg''gif''bmp''tif''mdb''pdf''exe''txt''htm''html''avi''mp3''mpg''wav'); 
if(
in_array($extension[$n], $miext))   

 
// La variable para la BD  

$ruta "modulos/$nombre/" $local;  
if(
is_uploaded_file($remoto))  
 {  
 if(!
move_uploaded_file($remoto$ruta))  
 {  
$error=true;  
}  
 }  
else  
 {  
$error=true;  
}  
 }  
else  
{  
$error=true;  
 }  
 }  
 }  
if(!
$error)  
   {  
$resumen=$_POST['resumen'];  
mysql_query("INSERT INTO tabla (documento,resumen) VALUES('$ruta','$resumen')");  
 
header("Location: index.php");  
 }  

luego, mediante un enlace, se puede acceder a la visualización de los archivos subidos. el problema aparece cuando el nombre del usuario (y por lo tanto, el nombre del directorio) lleva acento. por ejemplo, si un usuario se llama jesús. el directorio también se llamará jesús y lo creará y dejará subir correctamente a él los archivos y se guardan en esa carpeta. pero luego, al darle a ver, no los carga. da error. dice que no los encuentra. por qué es esto?
  #2 (permalink)  
Antiguo 16/03/2007, 07:30
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: problema con nombre de directorio con acento

Acostumbrate a validar los nombres de los directorios como asi tambien el nombre de los ficheros para que solo contengan letras, numeros y guiones como mucho. Si los nombres de directorios/archivos tienen este simple formato, no tendras problemas.

Podes aplicarles un filtro a los nombres al momento de crear directorios o subir archivos con str_replace() o usando expresiones regulares que es un poquito mas complicado.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 16/03/2007, 07:39
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: problema con nombre de directorio con acento

Te conviene unificar ese nombre, te dejo esta función que es la que uso para estos casos:

Código PHP:
function fileSystemName($nombre$separador ''){
    
$search = array(
        
chr(192),chr(193),chr(194),chr(195),chr(224),chr(225),chr(226),chr(227), // a
        
chr(201),chr(202),chr(233),chr(234), // e
        
chr(205),chr(237), // i
        
chr(211),chr(212),chr(213),chr(243),chr(244),chr(245), // o
        
chr(218),chr(220),chr(250),chr(252), // u
        
chr(199),chr(231), // c
        
chr(209),chr(241// ñ
    
); 
    
$replace = array(
        
'a','a','a','a','a','a','a','a',
        
'e','e','e','e',
        
'i','i',
        
'o','o','o','o','o','o',
        
'u','u','u','u',
        
'c','c',
        
'n','n'
    
);
    
$aux strtolower(str_replace($search$replace$nombre));    
    
$aux preg_replace('/[^a-z0-9]/',$separador,$aux);
    return 
$aux;

__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 19/03/2007, 01:12
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: problema con nombre de directorio con acento

unmmm, el problema creo que no era el acento, sino que en los archivos, sube nombres con espacios, es decir, sube un archivo llamado por ejemplo 'archivo a subir.pdf' con lo cual, el servidor no lo lee, debería ser 'archivo_a_subir.pdf'. pero también creo que sería bueno unificar lo de los acentos y tal. creo que con la función que me ha dejado nicolaspar se solucionaría el tema, pero ¿como implemento esta función en mi código?
  #5 (permalink)  
Antiguo 19/03/2007, 06:27
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: problema con nombre de directorio con acento

Hola estibaliz, cuando realizas la subida del archivo es el momento de usarla, mas precisamente en el momento en el que le indicas el nombre.

Código PHP:
$nombre_fichero_limpio fileSystemName($nombre_fichero_sucio); 
Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
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 23:59.