mkdir():codeigniter中的权限被拒绝

时间:2015-01-14 19:29:21

标签: php codeigniter csv file-upload centos

我刚刚将CI应用程序移动到真实服务器上,用户发现三个可选文件上传,两个用于常规文档和图像,第三个专用于csv文件,奇怪的是前两个上传工作好没有警告,文件上传没有问题,但第三个文件,csv文件,不断向我发送警告,并避免任何文件上传和它应该上传的目录也没有创建,代码为第一个文件是这个:

if (isset($_POST['save'])){
    $this->load->library('upload');

    $field = "file1";
    $nombreCarpeta = preg_replace('/\s+/', '.', $this->session->userdata("username"));
    $path = $this->config->item('server_root')."/codeigniter/uploads/".$nombreCarpeta."/";
    if(!file_exists($path)){
         mkdir($path, 0766);
    }

    $config["upload_path"] = $path;
    $config["overwrite"] = "TRUE";
    $config["remove_spaces"] = "TRUE";
    $config["allowed_types"] = "txt|pdf|gif|jpg|png|tiff|doc|docx|rtf|jpeg";
    $config["max_size"] = "1024*2048";
    $config["max_width"] = "1024";
    $config["max_height"] = "768";
    $config["xss_clean"] = "FALSE";

    $this->upload->initialize($config);
    $this->upload->do_upload($field);
    if($_FILES["file1"]['error'] == 0){
         if ($this->upload->do_upload($field)){
              $data = $this->upload->data();
              array_push($arreglo, $data['file_name']);
          }else{
               $errors = $this->upload->display_errors();
          }
    }
    .... same code, this time for file2

    $field = "file3";

    $pathDos = $this->config->item('server_root')."/codeigniter/listas/".$nombreCarpeta."/";
    if(!file_exists($pathDos)){
        mkdir($pathDos, 0777);
    }

    $config["upload_path"] = $pathDos;
    $config["overwrite"] = "TRUE";
    $config["remove_spaces"] = "TRUE";
    $config["allowed_types"] = "csv";
    $config["max_size"] = "1024*512";
    $config["xss_clean"] = "FALSE";

    $this->upload->initialize($config);
    $this->upload->do_upload($field);
    if($_FILES["file3"]['error'] == 0){
         if ($this->upload->do_upload($field)){
             $data = $this->upload->data();
             array_push($arregloDos, $data['file_name']);
         }else{
             $errors = $this->upload->display_errors();
         }
    } 
}

正如您所看到的,程序是相同的,除了一些上传配置,文件需要上传到两个以前创建的具有777权限,上传和列表的文件夹,其中,将动态创建单个文件夹,命名为用户名,为了区分用户文件,正如我所说,文档和图像目录(上传)没有问题,ls -l看起来像这样:

drwxrwxrwx.  2 root root  4096 Jan 14 05:59 listas
drwxrwxrwx.  3 root root  4096 Jan 13 11:18 uploads

ls -l里面的内容如下所示:

drwxr-xr-x. 2 apache apache 4096 Jan 13 13:29 administrator

用户管理员上传了几张图片,因此,在上传文件之前,在上传内成功创建了一个名为administrator的文件夹,但尝试上传csv文件时没有成功,即使文件夹listas具有777权限,没有文件夹内部listas已创建并且没有上传文件,因为“mkdir():权限被拒绝”警告!,因为您可以看到目录具有适当的权限,我做了一个测试,在listas中创建文件夹管理员并赋予它777权限和chown -ing / chgrp-it到apache,没有结果......任何想法?我正在开发CentOS ... thanx i.a。

1 个答案:

答案 0 :(得分:0)

可能是因为csv上传问题,这是一个codeigniter错误。

修复

打开application/config/mimes.php&更新line 13 (probably)

'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', 'text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),