PHP标头无法在共享主机上运行

时间:2017-01-15 21:45:31

标签: php

我使用标题和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

所以我得出结论,问题是标题没有生效,而不是下载代码本身。我在其他脚本中使用标题,它们工作正常,只是这一个脚本。

我已经看到了为什么会发生这种情况的各种解释,但是找不到适用于这种情况的任何解释,特别是因为它在一个环境中工作而在另一个环境中不工作。

任何想法都会受到欢迎。

0 个答案:

没有答案