zdx_y 发表于 2017-4-9 21:57:37

引入类库资源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

Hex 发表于 2017-4-9 22:40:36

报错行代码贴一下看看。另外,建议用 include 的方式引入外部类库,特别是这种复杂类库。

zdx_y 发表于 2017-4-10 10:43:23

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.");
        }
}

Hex 发表于 2017-4-10 11:01:11

我看了一下文档,建议你用
include_once '/path/to/Classes/PHPPowerPoint.php';
$phpPowerPoint = new PHPPowerPoint();
方式引入,因为他有自己的 autoloader,应该是和 CI 有冲突。
只要 include 路径搞对,肯定可以用。

zdx_y 发表于 2017-4-10 11:09:10

Hex 发表于 2017-4-10 11:01
我看了一下文档,建议你用

方式引入,因为他有自己的 autoloader,应该是和 CI 有冲突。


谢谢猪大,我按照你说的方式试一试
页: [1]
查看完整版本: 引入类库资源PHPPowerPoint报出“ Cannot redeclare class IOFactory”