I worked on an legacy system running PHP 5.2.6 on Windows and I can’t update it.
With php_zip enabled, PHPExcel loads .xls but still not .xlsx.
When loading a .xlsx, it’s simply die without any error message.
I have enabled all error report, but still no any clue.
error_reporting(E_ALL); ini_set('display_errors', 1);
After some brute-force debugging, I found the root cause:
The two lines of
@libxml_disable_entity_loader()
in Settings.php caused PHP fatal error and halted the output.
Worse still, those statements are suppressed by @ operator
/** * Set default options for libxml loader * * @param int $options Default options for libxml loader */ public static function setLibXmlLoaderOptions($options = null) { if (is_null($options)) { $options = LIBXML_DTDLOAD | LIBXML_DTDATTR; } @libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); self::$_libXmlLoaderOptions = $options; } // function setLibXmlLoaderOptions /** * Get default options for libxml loader. * Defaults to LIBXML_DTDLOAD | LIBXML_DTDATTR when not set explicitly. * * @return int Default options for libxml loader */ public static function getLibXmlLoaderOptions() { if (is_null(self::$_libXmlLoaderOptions)) { self::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR); } @libxml_disable_entity_loader($options == (LIBXML_DTDLOAD | LIBXML_DTDATTR)); return self::$_libXmlLoaderOptions; } // function getLibXmlLoaderOptions
libxml_disable_entity_loader is only available >= PHP 5.2.11
Comment it seems didn’t hurt anything. Problem solved!
Well, perfect example of why @ operator evil.
I have filed an issue to developers on GitHub, because PHPExcel claim to support down to 5.2.0.
Thank you very much! I also encountered this problem. Your solution really helped to me!
+1
+1