在PHP

2011-09-28 22 views
5

创建非英语目录我希望能够在自己的名字创建了注册用户的文件夹。他们的信息以西里尔字符存储在我的数据库中,并在创建文件夹时从他们的信息中提取。问题是,如果信息是英文的,一切都可以,如果在西里尔语里我有类似于Кульчманова的东西。一切都设置为utf-8。如果我将文件夹名称设置为'фыва',则创建它没有问题。在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.'/'; 

会感谢所有帮助

+4

我真的劝你,而不是使用一些UTF-8字符串的文件夹名称的UID。 – halfdan

+0

CodeIgniter数据库模块在MySQL中处理不同的排序规则吗?多字节的东西在PHP中不是自动的,如果它没有正确处理它,它会做这样的事情。 – Orbling

+1

你在哪个平台上? Windows文件名的惯例可能很奇怪,而且任何平台上都没有标准编码。 – phihag

回答

3

强烈建议您在服务器上,甚至更好的使用目录名的纯ASCII字符:只有数字,小写字母和下划线。使用特殊字符总会带来麻烦,看起来你已经有了一些。

我建议你,如果你发现它看起来更好(所有的名字有相同的长度)命名的目录中的数字用户ID(他们肯定有一个),填充用零。

+0

好吧我会用用户ID去...但文档名称呢?用户将上传文件并在表单中命名,因此在他/她的文件夹中,我希望在保存后查看文档的名称。 (以西里尔文)。如果我手动设置的名称它的工作原理,但不能从形式 – Alanagh

+0

拉时,您可以存储在数据库中的文件名,以及在一个表基本上是三列(用户ID,FILEID,文件名),这样你可以回忆实际从数据库中取得名称,然后从文件系统中获取文件数据。我知道这看起来很奇怪,但事实上这是事实。想一想:如果用户上传名称长于服务器文件系统允许的最大长度的文件,会发生什么情况?或者使用包含'..'的名称,以便如果将它与某个路径连接起来,它可以反向导航您的目录结构?太多东西要检查。 – gd1

+0

更多,如果文件足够小(几个KB),您可以将它们存储在BLOB中。但要小心,如果滥用,这可能会使你的数据库陷入沉寂。 – gd1