2011-09-28 11 views
5

Deseo poder crear carpetas para los usuarios registrados con sus nombres. Su información se almacena en mi archivo db en caracteres cirílicos y se extrae de ellos al crear la carpeta. La cuestión es si la información está en inglés, todo está bien, si en cirílico obtengo algo como РљСѓР »СЊС ‡ РјР ° РЅР °РЅР °Р °Р °. Todo está configurado para utf-8. Si configuro el nombre de la carpeta en i.e 'фыва', no crea ningún problema.Crear directorios que no sean en inglés en PHP

 $this->load->model('users_model'); 
    $i=$this->session->userdata('uid'); 
    $new_name=$this->input->post('doc_name'); 
    $folder=$this->users_model->getFullName($i); //$folder='фыва' works fine 

    if(!is_dir("./uploads/".$folder)){ 
     mkdir("./uploads/".$folder , 0777); 
    } 
    $config['file_name'] = $new_name; 
    $config['upload_path'] = './uploads/'.$folder.'/'; 

podrá apreciar cualquier ayuda

+4

Realmente le pido que use el uid en lugar de alguna cadena utf-8 para los nombres de las carpetas. – halfdan

+0

¿El módulo de base de datos CodeIgniter maneja diferentes colaciones en MySQL? Las cosas de Multibyte no son automáticas en PHP, si no lo manejan correctamente, harán cosas como esas. – Orbling

+1

¿En qué plataforma estás? Las convenciones de nombre de archivo de Windows pueden ser extrañas, y de todos modos no hay codificación estándar en ninguna plataforma. – phihag

Respuesta

3

I fuertemente recomiendo usar sólo caracteres ASCII plano en los nombres de directorio en los servidores, o aún mejor: sólo números, letras minúsculas y subrayado. Usar caracteres especiales siempre trae problemas, y parece que ya tienes algunos.

Le sugiero que nombre el directorio como el ID de usuario numérico (seguro que tienen uno), rellenando con ceros si le parece mejor (todos los nombres tienen la misma longitud).

+0

ok Iré con los identificadores de usuario ... pero ¿qué pasa con el nombre del documento? El usuario cargará el documento y lo nombrará en el formulario, por lo tanto, en su carpeta quiero ver el nombre del documento después de guardarlo. (en cirílico). si configuro el nombre manualmente, funciona, pero no cuando lo extraigo del formulario – Alanagh

+0

También puede almacenar los nombres de los archivos en la base de datos, en una tabla con esencialmente tres columnas (ID de usuario, nombre de archivo, nombre de archivo) para que pueda recuperar el nombre de la base de datos, y en su lugar obtener los datos del archivo del sistema de archivos. Entiendo que se ve raro, pero así es como se hacen las cosas en realidad. Piénselo: ¿qué sucede si el usuario carga un archivo con un nombre que es más largo que el máximo permitido por su sistema de archivos del servidor? ¿O con un nombre que contenga '...' de modo que si lo concatena con alguna ruta, puede retroceder su estructura de directorios? Demasiadas cosas para verificar – gd1

+0

Más, si los archivos son lo suficientemente pequeños (pocos KB), puede almacenarlos en BLOB. Tenga cuidado sin embargo, esto puede hundir su DB si se abusa. – gd1

Cuestiones relacionadas