【问题标题】:mkdir(): Permission denied in codeignitermkdir():codeigniter 中的权限被拒绝
【发布时间】:2015-03-13 02:33:43
【问题描述】:

我刚刚将我的 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权限,上传和列表,其中会动态创建单独的文件夹和命名为用户名,为了区分用户文件,正如我所说,docs和images目录(上传)没有问题, 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

用户管理员上传了几张图片,因此,在上传他的文件之前,在上传文件中成功创建了一个名为管理员的文件夹,但尝试上传 csv 文件时没有成功,即使文件夹 listas 有 777 权限,没有文件夹在 listas 内部创建并且没有上传文件,因为“mkdir(): Permission denied”警告!,正如你所看到的目录具有适当的权限,我做了一个测试,在 listas 内部创建文件夹管理员并给它 777 权限和 chown -ing/chgrp-ing 到 apache,但没有结果……知道吗?我正在开发 CentOS...thanx i.a.

【问题讨论】:

  • 我必须补充一点,我的应用程序在我的本地服务器 Apache、Codeigniter 2.2、OS X Mavericks、php 5.4 中运行良好
  • 做过任何基本的调试吗?您正在为第三个文件设置不同的路径(/ci/listas/codeigniter/uploads)。您是否验证了该路径?它存在吗?可以写吗?
  • Thanx @MarcB,我刚刚更正了问题中的代码,由于它们随后的不同用途,路径会有所不同,上传文件将被加载以进行分发(任务、思维导图、图像等),listas 文件将被加载以进行处理,特定和自定义的电子邮件传递列表,因此使用不同的加载路径。

标签: php codeigniter csv file-upload centos


【解决方案1】:

这可能是因为 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'),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2013-07-01
    • 2012-08-13
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多