打开下载的zip文件会创建cpgz文件吗?

tim*_*son 9 php zip zipfile http-headers

如果我为一个zip文件创建href一个链接的URL 并单击该链接,我的zip文件将被下载并打开它获取我期望的内容.

这是HTML:

<a href="http://mysite.com/uploads/my-archive.zip">download zip</a>
Run Code Online (Sandbox Code Playgroud)

问题是我想指向我的应用程序的链接,以便我可以确定用户是否有权访问此zip文件.

所以我希望我的HTML是这样的:

 <a href="/canDownload">download zip</a> 
Run Code Online (Sandbox Code Playgroud)

和我的PHP /canDownload页面:

//business logic to determine if user can download

if($yesCanDownload){

$archive='https://mysite.com/uploads/my-archive.zip';
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=".basename($archive));
header("Content-Length: ".filesize($archive));
ob_clean();
flush();
echo readfile("$archive");
}   
Run Code Online (Sandbox Code Playgroud)

所以,我认为这个问题与header()代码有关,但我已经尝试了一些基于各种谷歌和其他SO建议相关的东西,但没有工作.

如果你回答我的问题,很可能你也可以回答这个问题:带有PHP的压缩文件在提取后产生cpgz文件

car*_*ini 13

我的答案是在readfile()之前输出一个空行.

所以我补充说:

ob_end_clean();

ReadFile的($文件名);

但您应该搜索代码中输出此行的位置.


tim*_*son 2

好吧,我回答了我自己的问题。

我最初没有明确指出的主要问题是该文件不在我的应用程序服务器上。它位于 Amazon AWS s3 存储桶中。这就是为什么我在问题中使用了完整的 url,http://mysite...而不仅仅是服务器上的文件路径。事实证明fopen()可以打开 url(所有 s3 存储桶“对象”,又名文件,都有 url),所以这就是我所做的。

这是我的最终代码:

$zip= "http://mysite.com/uploads/my-archive.zip"; // my Amazon AWS s3 url
header("Content-Type: archive/zip"); // works with "application/zip" too
header("Content-Disposition: attachment; filename='my-archive.zip"); // what you want to call the downloaded zip file, can be different from what is in the s3 bucket   
$zip = fopen($zip,"r"); // open the zip file
echo fpassthru($zip); // deliver the zip file
exit(); //non-essential
Run Code Online (Sandbox Code Playgroud)