首页 >后端开发 >php教程 >phpexcel在linux系统报错如何解决

phpexcel在linux系统报错如何解决

小云云
小云云原创
2018-03-08 13:04:162263浏览

最近有个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插件了,要不是,有太多代码需要修改,估计我直接换插件了。

相关推荐:

TP3.2中phpexcel导入excel方法分享

PHP使用PHPExcel批量上传到数据库

thinkPHP+phpexcel实现excel报表输出功能实例详解

以上是phpexcel在linux系统报错如何解决的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn