下载 header 以获取 zip 存档
Download header for zip archive
我是一个真正的 php 新手,我有这段代码应该允许创建一个 ziarchive,其中包含 php 文件所在文件夹中的文件,为存档提供文件夹名称,将其保存在不同的文件夹中并下载。
$zipname = getcwd();
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/mypath/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
到目前为止一切顺利:创建的 zip 文件名称正确 ("foldername.zip"),并且正是我想要的位置,在服务器根目录的 /zip/ 文件夹中。
现在我被这个 headers 困住了,我无法将下载指向文件的正确位置和名称
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header("Location: /zip/$zipname");
?>
将最后一个 header 更改为
header("Location: /zip/foldername.zip");
可以正常使用,但我正在寻找一种解决方案,它不会在我每次创建新文件夹时都强制我编辑 php。
编辑:
这是工作代码
<?php
$zipname = getcwd();
$zipname = substr($zipname,strrpos($zipname,'\')+1);
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/inetpub/webs/mydomaincom/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);
?>
你最后的 header 不正确 :
header("Location: /zip/$zipname");
应该是:
header("Location: /zip/".$zipname);
因为你的 $zipname 是一个变量而不是一个字符串
尝试
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);
我是一个真正的 php 新手,我有这段代码应该允许创建一个 ziarchive,其中包含 php 文件所在文件夹中的文件,为存档提供文件夹名称,将其保存在不同的文件夹中并下载。
$zipname = getcwd();
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/mypath/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
到目前为止一切顺利:创建的 zip 文件名称正确 ("foldername.zip"),并且正是我想要的位置,在服务器根目录的 /zip/ 文件夹中。 现在我被这个 headers 困住了,我无法将下载指向文件的正确位置和名称
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header("Location: /zip/$zipname");
?>
将最后一个 header 更改为
header("Location: /zip/foldername.zip");
可以正常使用,但我正在寻找一种解决方案,它不会在我每次创建新文件夹时都强制我编辑 php。
编辑: 这是工作代码
<?php
$zipname = getcwd();
$zipname = substr($zipname,strrpos($zipname,'\')+1);
$zipname = $zipname.'.zip';
$zip = new ZipArchive;
$zip->open('D:/inetpub/webs/mydomaincom/zip/'.basename($zipname).'', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);
?>
你最后的 header 不正确 :
header("Location: /zip/$zipname");
应该是:
header("Location: /zip/".$zipname);
因为你的 $zipname 是一个变量而不是一个字符串
尝试
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
header('Content-Length: ' . filesize($zipname));
header('Location: /zip/'.$zipname);