首頁  >  文章  >  後端開發  >  phpexcel在linux系統報錯誤如何解決

phpexcel在linux系統報錯誤如何解決

小云云
小云云原創
2018-03-08 13:04:162218瀏覽

最近有個tp3.2的專案遷移到linux系統上了,突然有天發現原本在win server 2008上運行沒問題的excel匯出功能在新的系統上不能使用了。報錯誤如下: 

phpexcel在linux系統報錯誤如何解決 說是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  ,我試著把它刪除,上傳,測試,又報錯了:
phpexcel在linux系統報錯誤如何解決
這次是1721行,然後再找到這個位置的檔案刪除PHPExcel這個東東,然後繼續上傳,測試,後面大多數錯誤都是這種,刪掉函數定義時的PHPExcel即可,但是錯誤一個接一個,這是需要替換的文件:
phpexcel在linux系統報錯誤如何解決
#這個地方要加個空格,這樣才不會替換錯誤,好了,繼續上傳測試.
phpexcel在linux系統報錯誤如何解決
然後就這樣了…..當時內心是崩潰的…
繼續找問題吧,在測試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中php導入excel方法分享

PHP使用PHPExcel批次上傳到資料庫

thinkPHP+phpexcel實作excel報表輸出功能實例詳解

#

以上是phpexcel在linux系統報錯誤如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn