引入类库资源PHPPowerPoint报出“ Cannot redeclare class IOFactory”
在application/library下引用phpWord已经实现了导出word,但我在引入PHPPowerPoint时,总是提示重复申明IOfactory。PHPPowerPoint在没引入框架前是可以实现导出ppt的。我是这样安装PHPWord和PHPPowerPoint的:
1) 解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:
-- application\libraries\PHPExcel.php
-- application\libraries\PHPExcel (文件夹)
2)控制器调用语句如下:
$this->load->library('PHPPowerPoint');
$this->load->library('PHPPowerPoint/IOfactory');
3)已经尝试过修改application\libraries\PHPPowerPoint\IOFactory.php 文件
--将其文件名改为Iofactory.php
-- 将其类名从PHPPowerPoint_IOFactory改为Iofactory。
-- 将其构造函数改为public
报错行代码贴一下看看。另外,建议用 include 的方式引入外部类库,特别是这种复杂类库。 Hex 发表于 2017-4-9 22:40
报错行代码贴一下看看。另外,建议用 include 的方式引入外部类库,特别是这种复杂类库。 ...
A PHP Error was encountered
Severity: Compile Error
Message: Cannot redeclare class IOFactory
Filename: PHPPowerpoint/IOFactory.php
Line Number: 47
Backtrace:
/*****************报错代码*******************/
/** PHPPowerPoint */
require_once PHPPower_BASE_PATH.'PHPPowerPoint.php';
/** PHPPowerPoint_IWriter */
require_once PHPPower_BASE_PATH.'PHPPowerPoint/Writer/IWriter.php';
/** PHPPowerPoint_IReader */
require_once PHPPower_BASE_PATH.'PHPPowerPoint/Reader/IReader.php';
/**
* PHPPowerPoint_IOFactory
*
* @category PHPPowerPoint
* @package PHPPowerPoint
* @copyrightCopyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
*/
class IOFactory
{ //报错行在这个位置----47行
/**
* Search locations
*
* @var array
*/
private static $_searchLocations = array(
array( 'type' => 'IWriter', 'path' => 'PHPPowerPoint/Writer/{0}.php', 'class' => 'PHPPowerPoint_Writer_{0}' ),
array( 'type' => 'IReader', 'path' => 'PHPPowerPoint/Reader/{0}.php', 'class' => 'PHPPowerPoint_Reader_{0}' )
);
/**
* Autoresolve classes
*
* @var array
*/
private static $_autoResolveClasses = array(
'Serialized'
);
/**
* Private constructor for PHPPowerPoint_IOFactory
*/
//public function __construct() { }
/**
* Get search locations
*
* @return array
*/
public static function getSearchLocations() {
return self::$_searchLocations;
}
/**
* Set search locations
*
* @param array $value
* @throws Exception
*/
public static function setSearchLocations($value) {
if (is_array($value)) {
self::$_searchLocations = $value;
} else {
throw new Exception('Invalid parameter passed.');
}
}
/**
* Add search location
*
* @param string $type Example: IWriter
* @param string $location Example: PHPPowerPoint/Writer/{0}.php
* @param string $classname Example: PHPPowerPoint_Writer_{0}
*/
public static function addSearchLocation($type = '', $location = '', $classname = '') {
self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname );
}
/**
* Create PHPPowerPoint_Writer_IWriter
*
* @param PHPPowerPoint $PHPPowerPoint
* @param string$writerType Example: PowerPoint2007
* @return PHPPowerPoint_Writer_IWriter
*/
public static function createWriter(PHPPowerPoint $PHPPowerPoint, $writerType = '') {
// Search type
$searchType = 'IWriter';
// Include class
foreach (self::$_searchLocations as $searchLocation) {
if ($searchLocation['type'] == $searchType) {
$className = str_replace('{0}', $writerType, $searchLocation['class']);
$classFile = str_replace('{0}', $writerType, $searchLocation['path']);
if (!class_exists($className)) {
require_once($classFile);
}
$instance = new $className($PHPPowerPoint);
if (!is_null($instance)) {
return $instance;
}
}
}
// Nothing found...
throw new Exception("No $searchType found for type $writerType");
}
/**
* Create PHPPowerPoint_Reader_IReader
*
* @param string $readerType Example: PowerPoint2007
* @return PHPPowerPoint_Reader_IReader
*/
public static function createReader($readerType = '') {
// Search type
$searchType = 'IReader';
// Include class
foreach (self::$_searchLocations as $searchLocation) {
if ($searchLocation['type'] == $searchType) {
$className = str_replace('{0}', $readerType, $searchLocation['class']);
$classFile = str_replace('{0}', $readerType, $searchLocation['path']);
if (!class_exists($className)) {
require_once($classFile);
}
$instance = new $className();
if (!is_null($instance)) {
return $instance;
}
}
}
// Nothing found...
throw new Exception("No $searchType found for type $readerType");
}
/**
* Loads PHPPowerPoint from file using automatic PHPPowerPoint_Reader_IReader resolution
*
* @param string $pFileName
* @return PHPPowerPoint
* @throws Exception
*/
public static function load($pFilename) {
// Try loading using self::$_autoResolveClasses
foreach (self::$_autoResolveClasses as $autoResolveClass) {
$reader = self::createReader($autoResolveClass);
if ($reader->canRead($pFilename)) {
return $reader->load($pFilename);
}
}
throw new Exception("Could not automatically determine PHPPowerPoint_Reader_IReader for file.");
}
} 我看了一下文档,建议你用
include_once '/path/to/Classes/PHPPowerPoint.php';
$phpPowerPoint = new PHPPowerPoint();
方式引入,因为他有自己的 autoloader,应该是和 CI 有冲突。
只要 include 路径搞对,肯定可以用。 Hex 发表于 2017-4-10 11:01
我看了一下文档,建议你用
方式引入,因为他有自己的 autoloader,应该是和 CI 有冲突。
谢谢猪大,我按照你说的方式试一试
页:
[1]