带有PHPExcel致命错误的CodeIgniter无法重新声明IOFactory类 [英] CodeIgniter with PHPExcel fatal error cannot redeclare class IOFactory
问题描述
我正在尝试将PHPExcel与CodeIgniter结合使用.
I'm trying to use PHPExcel with CodeIgniter.
我的问题是,当我想在下面使用此方法时,出现 PHP致命错误:无法重新声明IOFactory类
My problem is when i want to use this method below, I got PHP Fatal Error : Cannot redeclare class IOFactory
如果不确定文件类型,则可以在使用createReader()方法实例化阅读器对象之前,使用IO Factory的identify()方法来标识所需的阅读器.
If you're uncertain of the filetype, you can use the IO Factory's identify() method to identify the reader that you need, before using the createReader() method to instantiate the reader object.
下面是我的代码:
$this->load->library('PHPExcel');
$this->load->library('PHPExcel/IOFactory');
$path = $upload_data['full_path'];
$inputFileType = PHPExcel_IOFactory::identify($path);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($path);
$objWorksheet = $objPHPExcel->getActiveSheet();
我尝试查找IOFactory类是否已经在某个地方创建,但是找不到.
I try to find if the IOFactory class already created somewhere but cannot find it.
仅供参考,目前正在使用最新版本的CodeIgniter(2.1)和PHPExcel(1.7.6).
FYI, im using the latest version of CodeIgniter (2.1) and PHPExcel (1.7.6) at this time of writing.
推荐答案
全部
我正在使用PHPExcel使用CI和杂货店_CRUD在Mysql中从Excel上传数据.这是我的方式:
I am using PHPExcel to upload data from Excel in Mysql with CI and grocery_CRUD. This is my way:
//我的Excel CI库
// My Excel CI Lib
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
require_once APPPATH . "/third_party/PHPExcel/IOFactory.php";
/*
* PHPExcel Lib For CI
*
* Class Excel
*
* Using PHP Excel Class
*/
class Lib_excel extends PHPExcel_IOFactory {
public function __construct() {
}
}
?>
//我的Excel CI模型
//My Excel CI Model
<?php
// My CI Model for handling all Excel methods
if (!defined('BASEPATH')) exit('No direct script access allowed');
// Class Model extend with CI Model
class Mod_excel extends CI_Model {
function __construct() {
// Call the Model constructor
parent::__construct();
}
/**
* Read data from Excel file
*
* @input string $excelFileName
* @input string $columnName (starting column point)
* @input string $startRow (starting column point)
* @return array $cellValues
*
* @example code
* $excelFileName = $_FILES['uploadedfile']['tmp_name'];
* $columnName = 'B';
* $startRow = '2';
* $cellValues = readWithExcel($excelFileName, $columnName, $startRow);
* $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($cellValues));
* foreach($iterator as $value) {
* $insert_data[] = $value;
* }
*/
function readWithExcel($excelFileName, $columnName, $startRow) {
//load our new Lib Excel library as object excel
$this->load->library('Lib_excel', null, 'excel');
// load excel file
$objPHPExcel = $this->excel->load($excelFileName);
// get active sheets
$objWorksheet = $objPHPExcel->getActiveSheet();
// get highest row column
$lastRow = $objWorksheet->getHighestRow();
// check cell value empty or not
for ($i = $startRow; $i < $lastRow; $i++) {
$colB = $objPHPExcel->getActiveSheet()->getCell($columnName . $i)->getValue();
if ($colB == NULL || $colB == '') {
die('The Cell' . ' <strong>B' . $i . '</strong> is empty. Please, remove or fill with data');
}
}
// get excel data with range e.g. (B2:B56)
$cellValues = $objPHPExcel->getActiveSheet()->rangeToArray("$columnName$startRow:$columnName$lastRow");
// return all data as array
return $cellValues;
}
}
?>
//我的控制器调用方法
// My Controller to call method
<?php
// My Admin Controller with grocery CRUD createCouponCode method (URL: admin/createCouponCode)
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Admin extends CI_Controller {
/**
* Just construct method to load
*/
function __construct() {
parent::__construct();
// Load Model excel and use as object ModExcel
$this->load->model('Mod_excel', 'ModExcel', true);
// Load CRUD lib
$this->load->library('grocery_CRUD');
}
/**
* Upload Coupon Code from Excel
*/
public function createCouponCode() {
$crud = new grocery_CRUD();
$crud->set_table('coupon_code');
$crud->fields('coupon_no');
$crud->columns('coupon_no');
$crud->set_subject('Coupon');
$crud->required_fields('coupon_no');
$crud->set_field_upload('coupon_no', '../public/uploads/');
$crud->callback_before_upload(array(
$this,
'_excel_uploaded_file'
));
$output = $crud->render();
$this->_example_output($output);
}
/**
* Call back Function form CRUD Upload
* @param array $files_to_upload
* @param array $field_info
* @return string
*/
function _excel_uploaded_file($files_to_upload = array(), $field_info = array()) {
$insert_data = array();
$ext = '';
$file_tmp_path = '';
foreach ($files_to_upload as $value) {
$ext = pathinfo($value['name'], PATHINFO_EXTENSION);
$file_tmp_path = $value['tmp_name'];
}
$allowed_formats = array(
"xlsx"
);
if (in_array($ext, $allowed_formats)) {
$excelFileName = $file_tmp_path;
$columnName = 'B';
$startRow = '2';
$cellValues = $this->ModExcel->readWithExcel($excelFileName, $columnName, $startRow);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($cellValues));
foreach ($iterator as $value) {
$insert_data[] = array(
'coupon_no' => $value
);
}
$this->output->enable_profiler(TRUE); //Turns on CI debugging
$this->db->insert_batch('coupon_code', $insert_data);
echo ($status) ? true : false;
} else {
return 'Error: Wrong file format. Use Excel 2007 format';
}
}
}
?>
//我将PHPExcel Lib放入CI的我的文件夹"
// My Folder where I put PHPExcel Lib in CI
这篇关于带有PHPExcel致命错误的CodeIgniter无法重新声明IOFactory类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!