PHP - 代码点火器:未捕获的异常“PHPExcel_Reader_Exception”,消息为“无法打开读取,文件不


PHP - Codeigniter : Uncaught exception 'PHPExcel_Reader_Exception' with message 'Could not open for reading, File does not exist

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

作为第一部分,上传的文件成功,我将文件上传到同一级别的应用程序、系统、资产中的上传文件夹。现在我想加载此文件并将这些内容导入数据库。我正在使用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() 时。上传/Data_Report.xls'。但是文件在物理上就在那里。我通过在URL上粘贴本地主机/我的项目/上传/Data_Report.xls进行验证,并成功下载。

任何帮助将不胜感激。

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

喜欢:

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

而不是

yourUrl.com/uploads/Data_Report.xls

如何获取绝对路径(无需硬编码!使用代码点火器,您可以使用:

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

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

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

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

它将如下所示:

如果 (!move_uploaded_file( $_FILES['file']['tmp_name'], $target_path ) ) { 抛出新的运行时异常("无法移动上传的文件"); }

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