您的位置:首页 > 运维架构 > Linux

thinkphp3.2 phpexcel在linux系统报错

2018-03-08 10:08 148 查看
最近有个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 <
4000
span class="hljs-number">0;
}   //  function TYPE()


这是完整流程,线上系统用的是centos7,php是也是7。这个估计是不兼容造成的,也没有再深一步研究了,毕竟其实有新的excel插件了,要不是,有太多代码需要修改,估计我直接换插件了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息