PHP - Codeigniter:未捕获异常'PHPExcel_Reader_Exception',消息'无法打开以进行读取,文件不存在

Shi*_*ubi 6 php xls codeigniter file-upload phpexcel

我当前的CI项目现在处理文件.我想上传一个xls | xlsx文件到服务器,然后将excel文件数据导入Database表.

作为第一部分,上传的文件成功,我将文件上传到相同级别的应用程序,系统,资产中uploads文件夹.现在我想加载这个文件并将这些内容导入到DB.我正在使用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);
   }
Run Code Online (Sandbox Code Playgroud)

这是我的观点

<?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>"?>
Run Code Online (Sandbox Code Playgroud)

当我跑步时,它显示我的错误 Uncaught exception 'PHPExcel_Reader_Exception' with 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进行验证,并成功下载.

任何帮助将不胜感激 .

Tzo*_*Noy 4

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

喜欢:

/var/www/YourProject/public/uploads/Data_Report.xls
Run Code Online (Sandbox Code Playgroud)

并不是

yourUrl.com/uploads/Data_Report.xls
Run Code Online (Sandbox Code Playgroud)

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

FCPATH   -> '/'
BASEPATH -> '/system/'
APPPATH  -> '/application/'
Run Code Online (Sandbox Code Playgroud)

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

APPPATH.'public/uploads/what_ever.xls';
Run Code Online (Sandbox Code Playgroud)