如何解决使用php标头“ Content-Type ....”下载会中断请求
我一直在尝试几种方法,并且在这里一直寻找答案,但没有发现任何东西。因此,我在问这个问题。
我不确定这是一个错误还是应该以这种方式起作用。
我在做什么(效果很好)
- 我已经编写了一个代码,用于解析xlsx文件并确定必须在数据库中插入哪些行,以及哪些行由于包含错误而必须被拒绝(这部分工作得很好)。
- 第1步将生成一个数组,其中包含所有有问题的行(以及包含有关错误信息的列)。 (效果很好)。
- 在第2步中生成的数组中,我创建了一个form元素,其中包含一系列输入,其中包含被拒绝行的序列化信息+被拒绝行的信息供用户查看(这也很完美)。
- 在此表单中,有一个按钮可触发通过POST发送表单。完成此操作后,所有被拒绝的行都将通过POST传递,并设置了名为“ confirm_upload”的$ _POST变量。 (效果很好)
- 完成第4步后,刷新页面,如果设置了$ _POST ['confirm_upload'],则在控制器(管理用户操作的部分)内,将处理在第3步中创建的表单,并生成xlxs和下载该文件供用户检查为什么这些行被拒绝。如下所示的代码用户(并且运行良好)。
$lines_to_download = array_merge( array($header),$rep_lines,$conf_lines,$error_lines);
$spreadsheet = new PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($lines_to_download,NULL,'A1');
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
header('Content-Disposition: attachment; filename="'. urlencode("uninserted.xlsx").'"');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate;');
header('Expires: 0');
header('Cache-Control: must-revalidate,post-check=0,pre-check=0');
header('Content-Length: ' . filesize($spreadsheet));
ob_clean();
flush();
$writer = new PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save('php://output');
出了什么问题?
问题在于,可以触发触发下载的相同$ _POST ['confirm_upload']来更改视图中的模板,因此用户不再看到拒绝行的列表,但是模板却没有更改。我已经签入了网站图标,该窗体刷新了页面,但是由于某种原因,该视图不受$ _POST更改的影响。 我已经评论了与下载相关的行,并在评论它们后,VIEW会正确刷新。因此,很明显,出于某种原因,下载过程阻止了$ _POST变量影响视图(尽管显然发送了eyey,因为如果不是这种情况,则下载不会发生)。
特别是,如果我注释以下行,则视图会受到$ _POST更改的适当影响(但是,显然,该文件不会下载):
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
header('Content-Disposition: attachment; filename="'. urlencode("lineas_no_insertadas.xlsx").'"');
我也尝试添加Header(“ location:index.php”)和header(Refresh:0),但它们什么也没做。我已经尝试了所有方法,包括注释一行并留下另一行,删除一些标头,使标头保持最小的所有组合。最后,除了注释这两行外,任何内容都会阻止请求(因此视图不会受到影响),因为下载会中断请求。
是应该工作的方式还是我做错了其他事情?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。