Код: Выделить всё
$Source_File = "test.xlsx";
$Spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($Source_File);
Код: Выделить всё
Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Reader\Exception: Unable to identify a reader for this file in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php:163
Stack trace:
#0 /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php(93): PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile('file:///home/ar...')
#1 /var/www/html/Function_Spreadsheet.php(480): PhpOffice\PhpSpreadsheet\IOFactory::load('file:///home/ar...')
#2 /var/www/html/Function_Home.php(3747): Spreadsheet_Reader_1('/var/www/html/F...', 3745, Array, Array)
#3 {main} thrown in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php on line 163
Я получаю следующую ошибку, если вместо этого использую $Spreadsheet = $reader->load($Source_File);
Код: Выделить всё
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 311
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 313
Notice: Trying to get property 'Relationship' of non-object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 350
Warning: Invalid argument supplied for foreach() in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 350
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 311
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 313
Notice: Trying to get property 'Relationship' of non-object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 397
Warning: Invalid argument supplied for foreach() in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 397
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 311
Warning: ZipArchive::getFromName(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 313
Notice: Trying to get property 'Override' of non-object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 1855
Warning: Invalid argument supplied for foreach() in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 1855
Warning: ZipArchive::close(): Invalid or uninitialized Zip object in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 1883
- Установите необходимые расширения и перезапустите Apache
- Проверьте права доступа к файлу
Я могу создать программу чтения $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();, но когда я делаю $Spreadsheet = $reader->load($Source_File); или $Spreadsheet = IOFactory::load($Source_File); я получаю то же самое ошибка.
Кроме того, я могу создать программу чтения xls, которая сможет читать файлы xls. Я также могу создать программу чтения xlsx, но она не будет читать файл xlsx, выдает ту же ошибку при попытке прочитать файл xlsx. Итак, почему возникает ошибка в файле xlsx?
Кроме того, я прочитал исходный код, на который указывает сообщение об ошибке (
Код: Выделить всё
IOFactory.phpКод: Выделить всё
//Let's see if we are lucky
if (isset($reader) && $reader->canRead($filename))
{
return $reader;
}
ОБНОВЛЕНИЕ:
Из комментариев и обсуждений я узнал, что canRead() определен в \PhpSpreadsheet\Reader\Xlsx.php, начиная с строки 65. В canRead() $zip->open($pFilename) возвращает код ошибки ZipArchive::ER_NOENT, что означает «Нет такого файла». Однако файл существует. Итак, почему возникает эта ошибка?
ОБНОВЛЕНИЕ – 18 декабря 2018 г.
На этой веб-странице предполагается, что существует несколько типов файлов xlsx. Итак, я запустил файл test.xlsx, который отображал Microsoft Excel 2007+. Затем я открыл электронную таблицу в LibreOffice Calc, сохранил ее как файл xlsx типа OOXML и повторно запустил файл test.xlsx, который отобразил Microsoft OOXML. Затем я повторно запустил PHP-скрипт, но получил ту же ошибку. Итак, похоже, что мой тип файла xlsx не является проблемой.
Итак, я решил использовать PHPExcel (хотя он и устарел), чтобы выполнить некоторую необходимую работу. Когда я запустил сценарий с помощью PHPExcel, я получил аналогичную ошибку о том, что canRead() не может обнаружить файл xlsx.
Итак, я продолжил чтение этой веб-страницы и последовал последнему предложению wesood, которое было получено из принятого ответа на этой веб-странице. Это решение сработало для меня: в файле /PHPExcel/IOFactory.php я добавил PHPExcel_Settings::setZipClass(\PHPExcel_Settings::PCLZIP); непосредственно перед if (isset($reader) && $reader->canRead($filename)).
Однако я все еще хочу знать, как решить эту проблему в Таблица Php. Кажется, мне нужно узнать больше о том, как работает pclzip и нужно ли выполнять аналогичное действие с PhpSpreadsheet.
ОБНОВЛЕНИЕ 2019-02-10:
Я попробовал запустить сценарий сегодня, и кажется, что добавление PHPExcel_Settings::setZipClass(\PHPExcel_Settings::PCLZIP); больше не требуется работает. Итак, я снова застрял...
Что я делаю не так? Любая помощь приветствуется!
ОБНОВЛЕНИЕ 18 февраля 2019 г.:
Следуя рекомендациям комментариев, я протестировал скрипт, используя случайные файлы XLSX, найденные в результатах поиска Google (например, этот файл), которые были либо Excel 2007+ или Microsoft OOXML и те же ошибки отображаются для PhpSpreadsheet:
Неустранимая ошибка: Неперехваченный PhpOffice\PhpSpreadsheet\Reader\Exception:
Невозможно определить средство чтения для этого файла в
/var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php:176
Трассировка стека: #0
/var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php(113):
PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile('file:///var/www...') #1 /var/www/html/Function_Spreadsheet.php(798): PhpOffice\PhpSpreadsheet\IOFactory::identify('file:///var/www...') #2
/var/www/html/Function_Home.php(3748):
Spreadsheet_Reader_1('/var/www/html/F...', 3746, Array, Array) #3
{main} добавлено в /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php в строке 176
Мобильная версия