最近、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レポート出力機能を実装する詳細な例
以上がLinuxシステムでphpexcelエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。