【发布时间】: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