2011-09-28 13 views
5

Desidero essere in grado di creare cartelle per gli utenti registrati con il loro nome. Le loro informazioni sono memorizzate nel mio db in caratteri cirillici e tirate da loro durante la creazione della cartella. Il fatto è che se le informazioni sono in inglese tutto va bene, se in cirillico ottengo qualcosa come РљСѓР »СЊС ‡ РјР ° РЅРѕРІР °. Tutto è impostato su utf-8. Se imposto il nome della cartella su i.e "фыва", non crea problemi.Creare directory non inglesi in 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.'/'; 

apprezzeranno alcun aiuto

+4

Vi esorto davvero a usare l'uid al posto di una stringa utf-8 per i nomi delle cartelle. – halfdan

+0

Il modulo del database CodeIgniter gestisce diverse regole di confronto in MySQL? Il materiale multibyte non è automatico in PHP, se non lo gestisce correttamente, farà cose del genere. – Orbling

+1

Su quale piattaforma sei? Le convenzioni dei nomi di file di Windows possono essere bizzarre e non esiste comunque alcuna codifica standard su alcuna piattaforma. – phihag

risposta

3

ho fortemente consiglio di utilizzare solo caratteri ASCII semplici in nomi di directory sul server, o meglio ancora: solo numeri, lettere minuscole, e di sottolineatura. L'utilizzo di caratteri speciali crea sempre problemi e sembra che tu stia già avendo alcuni.

Ti suggerisco di denominare la directory come ID utente numerico (ne hanno sicuramente uno), il riempimento con zeri se lo trovi sembra migliore (tutti i nomi hanno uguale lunghezza).

+0

ok andrò con gli ID utente ... ma per quanto riguarda il nome del documento? L'utente caricherà il documento e lo nominerà nel modulo, quindi nella sua cartella voglio vedere il nome del documento dopo averlo salvato. (in cirillico). se imposto il nome manualmente funziona, ma non quando viene estratto dal modulo – Alanagh

+0

Puoi anche archiviare i nomi dei file nel DB, in una tabella con essenzialmente tre colonne (userid, fileid, nome file) in modo da poter richiamare l'effettivo nome dal database, e invece ottenere i dati del file dal filesystem. Capisco che sembra strano, ma è come le cose sono fatte in realtà. Pensaci: cosa succede se l'utente carica un file con un nome più lungo del massimo consentito dal tuo file system del server? O con un nome che contiene '..' in modo che se lo si concatena con un percorso, può tornare indietro nella struttura della directory? Troppe cose da controllare. – gd1

+0

Inoltre, se i file sono abbastanza piccoli (pochi KB) è possibile memorizzarli in BLOB. Fai attenzione però, questo può affondare il tuo DB se abusato. – gd1

Problemi correlati