PHPExcel加载错误

我已经搜索过论坛里面相关的帖子了,我重复一下我的操作步骤:

在TestController里面




Yii::import('application.vendors.*');

require_once("excel/PHPExcel.php");

require_once("excel/PHPExcel/IOFactory.php");


class InvoiceController extends Controller

{

    //other code

    public function actionGetContent

    {

        $objPHPExcel = PHPExcel_IOFactory::load("05featuredemo.xlsx");

	$objPHPExcel = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

	CVarDumper::dump($objPHPExcel, 10 ,true);die();

    }

}



由上面的代码可以看出,我的PHPExcel是放在protected/vendors/excel,现在的文件夹列表如下:

protected/vendors

protected/vendors/excel

protected/vendors/PHPExcel

protected/vendors/PHPExcel.php

我访问 test/getcontent的时候,报下面的错误:

[color="#FF0000"]

include(PHPExcel_Reader_Excel2007.php) [<a href=‘function.include’>function.include</a>]: failed to open stream: 没有该文件或目录

[/color]

事实上,[color="#FF0000"]PHPExcel_Reader_Excel2007是一个类[/color],它是存在于 [color="#FF0000"]protected/vendors/PHPExcel/Writer/Excel2007.php[/color]文件里面,为什么yii要把它认为是一个.php文件来加载呢?还有哪一步的设置路径不对吗?

奇怪的是,

我把 protected/vendors/excel/PHPExcel/IOFactory.php 中 168-170行




if (!class_exists($className)) {

					require_once PHPEXCEL_ROOT . $classFile;

				}



改为




require_once PHPEXCEL_ROOT . $classFile;



又或者改为




if (!@class_exists($className)) {

					require_once PHPEXCEL_ROOT . $classFile;

				}



[color="#FF0000"]注意,在前面加多了一个 @ [/color]

这样就能够运行的。

是yii的原因,还是PHPExcel的原因呢?

有什么解决方案吗?

yii的自动加载要求类名和文件名一样。如果不是这样,你需要显式的include类文件。

如果按照qiang哥这么说的话,我就要首先了解A类包含的B、C类在什么文件里面,以便导入这样~~~

觉得怪怪的 :blink:

不过我现在就是在

class_exists()

前面加多一个 @ ,就可以用了~囧。。。