我在许多网站上看,但我发现没有可行的解决方案。所以我想在这里寻求帮助,谢谢大家的任何建议。 我的问题是我有这个代码用于文件下载:
//***** DWN FILE *****
ignore_user_abort(true);
set_time_limit(0);
ob_get_clean();
ob_start();
header("refresh: 1;");
header('Content-Type: application/jpg');
header('Content-Length: ' . filesize($my_allpath_dwn));
header('Content-Disposition: attachment; filename="'.$my_imgfile.'"');
@$file_dwnr = readfile($my_allpath_dwn);
if ($file_dwnr) {$_SESSION['dwnstat'] = 'oki'; ob_flush(); flush();}
else {header("Location:./error_dwnmsg.html");}
if (connection_aborted()) {header('Location: '.$_SERVER['REQUEST_URI']);}
exit;
如果用户单击“保存”按钮,则一切正常,因此此脚本完全继续,文件已保存,页面刷新后为>没问题。 但是如果用户单击CANCEL,当打开与SaveAs的对话框时,没有保存文件(这没关系,对我来说没关系),但页面也没有去刷新。在我看来,标题已被发送,如果它们被终止,那么即使还有其他行动要做,也不会发生任何事情。
我也尝试使用JS进行ECHO,但没有成功。唯一有效的是“header-Location”,但是如果我在退出之前放置位置,那么带有Readfile的标题将被删除而不会发送到浏览器,只会发送位置。
我的问题是,有没有办法如何在Readfile Flush之后进行重定向(页面刷新)甚至用户点击SaveAs对话框中的CANCEL? (我需要刷新页面,但是在Readfile Flush之后 - 用户看到SaveAs对话后,无论是否点击SAVE或CANCEL) 谢谢你的建议。
更新:我试了一次=>我将代码分为2页。第一页的一部分,用户点击下载按钮(输入),然后将其重定向(按位置“page2”)到第二页。在现在重定向的第二页上,是此下载的代码(刷新)。猜猜......又是一种奇怪的行为......因为当我点击下载按钮上的第一页所以Header-Location只在后台制作 - 我仍然在浏览器中看到第一页(甚至是位置已经制作)什么怎么回事.....我现在必须自己去做一些咖啡,我很困惑.... 我认为,如果我使用Header-Location,那么页面会转到另一个页面,只有在加载了第二页的内容之后(所有连接的脚本,因为第二页调用它们,而不是第一页)。