最近有个tp3.2的项目迁移到linux系统上了,突然有天发现原本在win server 2008上运行没问题的excel导出功能在新的系统上不能使用了。报错如下:
说是1762行有问题,找到这个文件的代码看看:/**
* Get an instance of this class
*
* @access public
* @param PHPExcel $workbook Injected workbook for working with a PHPExcel object,
* or NULL to create a standalone claculation engine
* @return PHPExcel_Calculation
*/
public static function getInstance(PHPExcel $workbook = NULL) {
if ($workbook !== NULL) { if (isset(self::$_workbookSets[$workbook->getID()])) { return self::$_workbookSets[$workbook->getID()];
} return new PHPExcel_Calculation($workbook);
} if (!isset(self::$_instance) || (self::$_instance === NULL)) { self::$_instance = new PHPExcel_Calculation();
} return self::$_instance;
} // function getInstance()
这个函数getInstance(PHPExcel $workbook = NULL)
发现这个函数 定义的时候多了个PHPExcel ,我试着把它删除,上传,测试,又报错了:
这次是1721行,然后再次找到这个位置的文件删除 PHPExcel这个东东,然后继续上传,测试,后面大多数错误都是这种,删掉函数定义时的PHPExcel即可,但是错误一个接一个,这是需要替换的文件:
这个地方要加个空格,这样才不会替换错误,好了,继续上传测试.
然后就这样了…..当时内心是崩溃的…
继续找问题吧,在测试php文件里面输出变量进行测试。PHPExcel\PHPExcel\Calculation\Functions.php 下面这个文件,中有个 **TYPE**函数,将其中的break去掉,上传,ok了/**
* TYPE
*
* Returns a number that identifies the type of a value
*
* @param value The value you want tested
* @return number N converts values listed in the following table
* If value is or refers to N returns
* A number 1
* Text 2
* Logical Value 4
* An error value 16
* Array or Matrix 64
*/
public static function TYPE($value = NULL) {
$value= self::flattenArrayIndexed($value); if (is_array($value) && (count($value) > 1)) { $a = array_keys($value); $a = array_pop($a); // Range of cells is an error
if (self::isCellValue($a)) { return 16; // Test for Matrix
} elseif (self::isMatrixValue($a)) { return 64;
}
} elseif(empty($value)) { // Empty Cell
return 1;
} $value= self::flattenSingleValue($value); if (($value === NULL) || (is_float($value)) || (is_int($value))) { return 1;
} elseif(is_bool($value)) { return 4;
} elseif(is_array($value)) { return 64; break;
} elseif(is_string($value)) { // Errors
if ((strlen($value) > 0) && ($value{0} == '#')) { return 16;
} return 2;
} return 0;
} // function TYPE()
这是完整流程,线上系统用的是centos7,php是也是7。这个估计是不兼容造成的,也没有再深一步研究了,毕竟其实有新的excel插件了,要不是,有太多代码需要修改,估计我直接换插件了。
相关推荐: