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

时间:2014-12-31 07:52:51

标签: php codeigniter file-upload phpexcel xls

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

作为第一部分,上传的文件已成功,我将文件上传到应用程序,系统,资源的相同级别的上传文件夹。现在我想加载这个文件并将这些内容导入到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);
   }

这是我的观点

<?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 message 'Could not open http://localhost/myproject/uploads/Data_Report.xls for reading! File does not exist.'

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

问题在于我使用BASE_URL()。&#39; uploads / Data_Report.xls&#39;。但该文件在实际存在,我通过粘贴url上的localhost / myproject / uploads / Data_Report.xls进行验证,并成功下载。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

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

像:

/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 :(得分:1)

您是否正在将xls文件复制到您的&#34;上传&#34;表单提交目录?

它将如下所示:

if(!move_uploaded_file(                         $ _FILES [&#39; file&#39;] [&#39; tmp_name&#39;],$ target_path                 )         ){             抛出新的RuntimeException(&#39;无法移动上传的文件。&#39;);         }

默认情况下,文件被上传到临时目录(在你的情况下似乎是htdocs),在通过PHP Excel lib执行Excel打开之前需要将其移动到目标路径。