php - 致命错误:未捕获的 PhpOffice\PhpSpreadsheet\Reader\Exception:找不到 zip 成员
问题描述
我已经使用 Composer安装了这个库的最新版本。我创建了一个测试文件来测试库的功能,但是当我尝试解析一个文件并从中创建一个数据数组时,我得到了这个错误;
致命错误:未捕获的 PhpOffice\PhpSpreadsheet\Reader\Exception:在 /home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/ 中找不到 zip 成员 zip:///home/klik/tmp/php4cfRJH#_rels/.rels Shared/File.php:159
堆栈跟踪:
#0 /home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/Reader/Xlsx.php(392): PhpOffice\PhpSpreadsheet\Shared\File::assertFile('/home /klik/tmp/...', '_rels/.rels')
#1 /home/klik/scripts/PhpSpreadsheet-master/test.php(37): PhpOffice\PhpSpreadsheet\Reader\Xlsx->load('/ home/klik/tmp/...')
#2 {main}在第159行的/home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/Shared/File.php中抛出
这是我的test.php
文件:
<?php
echo '<!DOCTYPE html>
<html>
<body>
<form method="post" action="test.php" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File Upload</label>
<input type="file" name="file" class="form-control" id="exampleInputFile">
</div>
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>
</body>
</html>';
require_once 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
if (isset($_POST['submit'])) {
$file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
if(isset($_FILES['file']['name']) && in_array($_FILES['file']['type'], $file_mimes)) {
$arr_file = explode('.', $_FILES['file']['name']);
$extension = end($arr_file);
if('csv' == $extension) {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
} else {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
}
$spreadsheet = $reader->load($_FILES['file']['tmp_name']);
$sheetData = $spreadsheet->getActiveSheet()->toArray();
print_r($sheetData);exit;
}
}
?>
我正在使用最简单的.xls
Excel 文件进行处理。
使用的 php -v 版本:
PHP 7.4.14 (cli) (built: Jan 30 2021 20:03:43) (ZTS) 版权所有 (c) The PHP Group Zend Engine v3.4.0, 版权所有 (c) Zend Technologies
解决方案
if('csv' == $extension) {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
} else if('xls' == $extension) {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
} else
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
推荐阅读
- python - SARIMAX 预测平均输出
- javascript - 在 django 框架中使用 javascript 插件进行图像缩放/放大
- angular - 如何将自定义组件注册为有效、无效、脏、已触摸等
- r - “是否有用于标记单词主题的 R 函数(文本分析)(例如:名词、形容词)?”
- javascript - 如何创建一个新函数来接收一组数字并将它们全部相加?
- pandas - 给定一个包含 N 个元素的数据帧,如何使 m 个更小的数据帧使得每个 m 的大小是 N 的一部分?
- r - 使用 facet_wrap 向 ggplot 添加图例
- go - oauth 令牌请求错误,“缺少必需的参数 'client_id'”,
- c# - 串行端口 Readbyte() 错误;它突然停止接收数据
- python - get_document_topics 返回一个空列表。