我有一个PHP脚本,可以动态创建一个zip文件并强制浏览器下载zip文件.问题是:我可以直接将zip文件写入连接到用户浏览器的输出流,而不是先将其保存为服务器上的真实文件然后发送文件吗?
提前致谢.
我有这个代码
<?php
$files = array('includes/s.xlsx', 'includes/test.html');
$zipname = 'file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=filename.zip');
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
Run Code Online (Sandbox Code Playgroud)
但我不想将zip文件保存到服务器,我只是想将它提供给用户.
我有一个 php 表单,它有一堆复选框,所有复选框都包含文件链接。一旦用户点击他们想要的复选框(文件),它就会压缩文件并强制下载。
我有一个简单的 php zip 强制下载可以工作,但是当其中一个文件很大或者有人说选择整个列表进行压缩和下载时,我的服务器就会出错。
我知道我可以增加服务器大小,但还有其他方法吗?
我正在使用托管在 Amazon Elastic Beanstalk 上的 php 创建我的第一个 Web 应用程序,我有点不知所措。我的任务是访问 AWS S3 云中最终客户指定的文件,将它们压缩,最后提供指向生成的 zip 文件的下载链接。我已经做了很多搜索来找到我正在尝试做的事情的实例,但是我对 php 的缺乏经验阻碍了确定某个解决方案是否适合我。
我在这里找到了这个问题和回复,并且看到它似乎在一般意义上解决了 php 和 zip 下载,我想我可以根据我的需要调整它。以下是我在 php 中的内容:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require "./aws.phar";
use Aws\S3\S3Client;
$client = S3Client::factory(array(
'key' => getenv("AWS_ACCESS_KEY_ID"),
'secret' => getenv("AWS_SECRET_KEY")
));
echo "Starting zip test";
$client->registerStreamWrapper();
// make sure to send all headers first
// Content-Type is the most important one (probably)
//
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="file.zip"');
// use popen to execute a unix command pipeline
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码从目录创建zip文件,并通过http下载将其提供给用户:
// write the file
file_put_contents($path . "/index.html", $output);
// zip up the contents
chdir($path);
exec("zip -r {$course->name} ./");
$filename = "{$course->name}.zip";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' .urlencode($filename));
header('Content-Transfer-Encoding: binary');
readfile($filename);
Run Code Online (Sandbox Code Playgroud)
我能够创建zip文件,但通过http下载它不起作用.如果我下载使用ftp客户端创建的zip文件,那么Mac的Stuffit Expander就可以解压缩文件了,但如果我通过http下载它,mac unzipper会创建一个无限循环.我的意思是说我下载的文件名为course.zip,然后解压缩文件给出course.zip.cpgz并解压缩该文件再次给出course.zip ..然后再打开.
有人有主意吗?
谢谢!
我卖S3中托管的歌曲.人们选择它们并且可以下载,但是如果他们购买整张CD,他们可以将其下载为zip文件.问题是我必须动态创建zip文件,这非常慢.我正在使用Zip库,从文件获取内容的字符串中添加文件,然后(可能需要时间),用户客户端为下载付费,这是很多时间.有没有其他方法可以更快地提供它,也许与其他一些库?