PHP - Codeigniter:未捕获异常“PHPExcel_Reader_Exception”,消息为“无法打开阅读,文件不存在”

问题描述 投票:0回答:3

我当前的 CI 项目现在正在处理文件。我要上传xls| xlsx 文件传输到服务器,然后将 Excel 数据导入到数据库表中。

作为第一部分,上传文件成功,我将文件上传到application、system、assets同级的uploads文件夹中。现在我想加载这个文件并将这些内容导入到数据库中。我正在使用 PHPExcel 来执行此操作。

这是我的控制器

$this->load->library('phpexcel');
$this->load->library('PHPExcel/iofactory');

$objPHPExcel = new PHPExcel();

$objReader= IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);

$objPHPExcel=$objReader->load(BASE_URL().'uploads/Data_Report.xls');

$objWorksheet=$objPHPExcel->setActiveSheetIndex(0);

$this->load->model('datas_model');

for($i=2;$i<=77;$i++) {

     $client_name= $objWorksheet->getCellByColumnAndRow(0,$i)->getValue();
     $client_address= $objWorksheet->getCellByColumnAndRow(1,$i)->getValue();
     $data_inp=array('name'=>$client_name, 'address'=>$client_address);
     $this->datas_model->add_data($data_inp);
   }

这是我的观点

<?php echo form_open_multipart('../settings_controller/upload_data/do_upload');?>

   <div class="custom-file-upload">
        <input type="file" id="file" name="userfile" multiple/>
   </div>
   <div class="button-container-2">
        <button class="btn btn-primary" id="updown-btn" type="submit" style="height:45px;">Upload </button>
   </div>

<?php echo "</form>"?>

当我运行时,它显示错误

Uncaught exception 'PHPExcel_Reader_Exception' with the message 'Could not open http://localhost/myproject/uploads/Data_Report.xls for reading! File does not exist.'

当我将 Data_Report.xls 文件放入 htdocs 中时,它成功运行。

问题出在使用 BASE_URL().'uploads/Data_Report.xls' 时。但该文件实际存在。我通过在 URL 上粘贴 localhost/myproject/uploads/Data_Report.xls 进行验证,并且下载成功。

任何帮助将不胜感激。

php codeigniter file-upload phpexcel xls
3个回答
4
投票

我不确定是否是这种情况,但你应该尝试添加文件系统中的绝对路径而不是网址的路径。

喜欢:

/var/www/YourProject/public/uploads/Data_Report.xls

而不是

yourUrl.com/uploads/Data_Report.xls

如何获取绝对路径(无需硬编码!) 通过 codeigniter,您可以使用:

FCPATH   -> '/'
BASEPATH -> '/system/'
APPPATH  -> '/application/'

所以我不记得 codeigniter 的结构,但我从谷歌得到了这个, 所以做这样的事情:

APPPATH.'public/uploads/what_ever.xls';

1
投票

您是否在提交表单时将 xls 文件复制到“上传”目录?

它会像下面这样:

if (!move_uploaded_file($_FILES['file']['tmp_name'], $target_path))
{
   throw new RuntimeException('Failed to move uploaded file.');
}

默认情况下,文件上传到临时目录中(在您的情况下似乎是

htdocs
),并且需要在通过 PHP Excel 库执行 Excel 打开之前将其移动到选择的目标路径。


0
投票

首先,检查php.ini文件中的upload_max_filesize。 如果你的 Excel 大小 < to upload_max_filesize size this error will happend.

© www.soinside.com 2019 - 2024. All rights reserved.