Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ';没有要提取的文件';试图解压缩强制下载的zip时显示的消息_Php_Zip_Archive - Fatal编程技术网

Php ';没有要提取的文件';试图解压缩强制下载的zip时显示的消息

Php ';没有要提取的文件';试图解压缩强制下载的zip时显示的消息,php,zip,archive,Php,Zip,Archive,当我试图强制解压缩从服务器下载的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

当我试图强制解压缩从服务器下载的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); 

有人知道为什么会这样吗?任何帮助都将不胜感激。提前感谢

我无法回答这个问题,但这里有一些想法可以尝试:

  • 尝试不同的mimetype,例如generic
    应用程序/octet流
  • 附加Fiddler(或任何其他HTTP调试器)并查看传输。你看到了什么?文件正在下载吗?可能由于某种原因,存在无效的内容长度标题
  • 正如@middaparka在注释中所指出的,不要抑制
    readfile()
    中的错误

    • 我无法回答这个问题,但这里有一些想法可以尝试:

      • 尝试不同的mimetype,例如generic
        应用程序/octet流
      • 附加Fiddler(或任何其他HTTP调试器)并查看传输。你看到了什么?文件正在下载吗?可能由于某种原因,存在无效的内容长度标题
      • 正如@middaparka在注释中所指出的,不要抑制
        readfile()
        中的错误

      很难判断这是由于您使用的头文件还是服务器问题造成的。但是,我通常使用以下内容,没有任何问题:

      header("Cache-Control: private");
      header("Content-Type: application/stream");
      header("Content-Length: ".filesize($file));
      header("Content-Disposition: attachment; filename=".basename($file));
      
      readfile($file);
      exit();
      

      因此,您可能希望尝试上述方法,看看这是否有什么不同。(猜测一下,如果您的连接速度较慢,那么您没有提供内容长度标题这一事实可能不会有帮助。)

      很难判断这是由于您使用的标题还是服务器问题造成的。但是,我通常使用以下内容,没有任何问题:

      header("Cache-Control: private");
      header("Content-Type: application/stream");
      header("Content-Length: ".filesize($file));
      header("Content-Disposition: attachment; filename=".basename($file));
      
      readfile($file);
      exit();
      

      因此,您可能希望尝试上述方法,看看这是否有什么不同。(猜测一下,如果您的连接速度较慢,那么您没有提供内容长度标题这一事实可能不会有帮助。)

      感谢大家的支持。我找到了解决办法。在发送邮件头之前,我已经使用了mkdir函数。这似乎产生了一些错误,所以在头文件之前输出了错误,从而导致了问题。当我使用“@”运算符抑制错误时,问题得到了解决。:)。早些时候,我从fiddler那里收到了以下消息:“fiddler在会话4中检测到协议冲突。服务器没有返回正确格式的HTTP头。可能完全丢失了(例如HTTP/0.9),可能只是\r\r而不是\r\n\r\n?”

      谢谢大家的支持。我找到了解决办法。在发送邮件头之前,我已经使用了mkdir函数。这似乎产生了一些错误,所以在头文件之前输出了错误,从而导致了问题。当我使用“@”运算符抑制错误时,问题得到了解决。:)。早些时候,我从fiddler收到了以下消息:“fiddler在会话#4中检测到协议冲突。服务器没有返回正确格式的HTTP头。可能完全丢失了(例如HTTP/0.9),可能只是\r\r而不是\r\n\r\n?”

      禁止读取文件上的错误可能不明智。禁止读取文件上的错误可能不明智。我尝试了您的代码,但问题没有解决。我认为这不是服务器问题,因为我可以直接从服务器下载zip。谢谢您的回答。@ksun我的代码在各种服务器上都能正常工作,因此我想知道这是否是服务器问题。您是否按照@Vilx-建议检查了从响应中返回的标题?(你可以用Firebug等来做这件事。)我会和fiddler核实一下,告诉你我试过你的代码,但问题没有解决。我认为这不是服务器问题,因为我可以直接从服务器下载zip。谢谢您的回答。@ksun我的代码在各种服务器上都能正常工作,因此我想知道这是否是服务器问题。您是否按照@Vilx-建议检查了从响应中返回的标题?(你可以用Firebug等来做这件事。)我会和fiddler核实一下,让你知道我试过“八位组流”,但没有找到任何解决方案。正如@middaprka所说,我消除了压制。两者都没有帮助。谢谢你的回答。@ksun-你在Fiddler身上看到了什么?也许你可以从中向我们发送保存的“会话”?我尝试了“八位字节流”,但没有找到任何解决方案。正如@middaprka所说,我消除了压制。两者都没有帮助。谢谢你的回答。@ksun-你在Fiddler身上看到了什么?也许你可以把它保存的“会话”发送给我们?