当我尝试从服务器中强行提取我下载的zip文件夹时,我收到消息“没有要提取的文件”。但是当我直接从服务器下载zip文件夹时,我能够正确地提取它。这是我用来强行下载的代码。
$file = 'absolute/path/to/the/zip/folder';
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header( "Content-Disposition: attachment; filename=".basename($file));
header( "Content-Description: File Transfer");
@readfile($file);
有谁知道为什么会这样?任何帮助,将不胜感激。提前致谢
答案 0 :(得分:1)
我无法回答这个问题,但这里有一些想法可以尝试:
application/octet-stream
。readfile()
的错误。答案 1 :(得分:0)
判断这是由于您正在使用的标头还是服务器问题,这很棘手。但是,我通常使用以下内容没有任何问题:
header("Cache-Control: private");
header("Content-Type: application/stream");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".basename($file));
readfile($file);
exit();
因此,您可能想尝试上述内容,看看是否有任何区别。 (猜测,如果您的连接速度很慢,那么您没有提供Content-Length标头的事实可能无助于这种情况。)
答案 2 :(得分:0)
谢谢大家的支持。我找到了解决方案。我在发送标头之前使用过mkdir函数。这似乎产生了一些错误,因此在标题之前输出错误,从而导致问题。当我使用'@'运算符来抑制错误时,问题就解决了。 :)。早些时候,我从fiddler得到以下消息:“Fiddler在会话#4中检测到协议违规。服务器没有返回格式正确的HTTP标头。可能完全丢失(例如HTTP / 0.9),可能只有\ r \ n而不是\ r \ n \ r \ n吗?“