【问题标题】:PHP - Codeigniter : Uncaught exception 'PHPExcel_Reader_Exception' with message 'Could not open for reading, File does not existPHP - Codeigniter:未捕获的异常“PHPExcel_Reader_Exception”,消息“无法打开读取,文件不存在”
【发布时间】:2015-02-27 08:35:21
【问题描述】:

我当前的 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 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


    【解决方案1】:

    我不确定是不是这样,但是您应该尝试在文件系统中添加绝对路径,而不是 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';
    

    【讨论】:

    • 现在我通过删除 base_url 提供相对路径时得到了解决方案。但是这是解决此问题的正确方法吗?因为它不使用 base_url 。?那么未来有什么问题(托管)
    • 更新了我没有硬编码绝对路径的答案,并告诉我它是否有效
    • 是的,在没有 BASE_URL() 的情况下尝试 ./myproject/uploads/Data_Report.xls 时它已经工作了
    • 使用 codeigniter 路径,因此如果您移动项目目录,它仍然可以工作。如果对您有帮助,请接受答案:)
    【解决方案2】:

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

    如下所示:

    如果 (!move_uploaded_file( $_FILES['file']['tmp_name'], $target_path ) ) { throw new RuntimeException('上传文件移动失败'); }

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

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 2014-11-26
      • 2014-12-23
      • 2014-09-09
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2016-12-17
      • 2016-05-19
      相关资源
      最近更新 更多