YII autoload 与第三方冲突
- 作者:scsidisk
- 最后编辑:2014年08月12日
- 标签:
PHP,
Yii
YII autoload 可能与第三方的类库中的 autoload 冲突,下面以 PHPExcel 为例说明。
处理PHPExcel autoload和YII autoload相冲突的方法任选其一,推荐第4种,最符合YII标准)
1、修改PHPExcel中的Autoloader.php
1
2
| PHPExcel_Autoloader::Register();
PHPExcel_Shared_ZipStreamWrapper::register();
|
修改为
1
| Yii::registerAutoloader(array('PHPExcel_Autoloader','Register'),true);
|
2、修改Autoloader.php文件中的Register方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public static function Register() {
/*
if (function_exists('__autoload')) {
//Register any existing autoloader function with SPL, so we don't get any clashes
spl_autoload_register('__autoload');
}
//Register ourselves with SPL
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
*/
$functions = spl_autoload_functions();
foreach ( $functions as $function)
spl_autoload_unregister($function);
$functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);
foreach ( $functions as $function)
$x = spl_autoload_register($function);
return $x;
} // function Register()
|
3、在需要使用进行设置
1
2
3
4
5
6
| $filePath = '/home/public_html/sqt/protected/data/queueSql/company.xls';
spl_autoload_unregister(array('YiiBase', 'autoload'));
$phpExcelPath = Yii::getPathOfAlias('application.extensions.PHPExcel.PHPExcel');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'IOFactory.php');
spl_autoload_register(array('YiiBase', 'autoload'));
$PHPExcel = PHPExcel_IOFactory::load( $filePath);
|
4、设置enableIncludePath
1
2
| Yii::$enableIncludePath = false;
Yii::import('application.vendors.phpexcel.PHPExcel', 1);
|
转自:http://blog.csdn.net/tinico/article/details/18033575