我使用标题和file.php
整理了一个下载脚本(名为readfile()
),实际下载逻辑如下:
header("Content-type: " . mime_content_type($path));
header("Content-Length: " . filesize($path));
header('Content-Disposition: attachment; filename="' . $fileName . '"');
ob_clean();
flush();
readfile($path);
在此之前,有大约30行mysqli-access,用于从db获取文件信息。只有一个php块,没有html输出(除了偶然的异常回声,但它们没有被调用)。
这在我的本地环境中非常出色,文件强制下载正确。但是,当我将其上传到我的网站(共享主机)时,它会直接在浏览器中打开文件,但这些文件无法正常工作。
我已经玩了很多,发现如果我把只上面的逻辑放在一个单独的文件中(为所需的变量增加了查询参数),它有效。
我不喜欢它,但决定随身携带。为此,我将file.php
中的下载逻辑替换为header("Location: download.php?path={path}&fileName={fileName});"
,其中download.php
仅包含下载逻辑。
再一次,在当地工作很精彩,但是一旦我把它放在主机上,它就不起作用了。但是,这次header("Location:...");
不起作用。直接访问download.php
。
所以我得出结论,问题是标题没有生效,而不是下载代码本身。我在其他脚本中使用标题,它们工作正常,只是这一个脚本。
我已经看到了为什么会发生这种情况的各种解释,但是找不到适用于这种情况的任何解释,特别是因为它在一个环境中工作而在另一个环境中不工作。
任何想法都会受到欢迎。