将文件压缩到一个文件夹中,并给出存档文件夹的名称
Zip files in a folder and give the archive folder's name
我是 php 的新手,我刚刚制作了我的第一个脚本,它工作正常,但缺少最后的润色。
该脚本将所有文件压缩到包含 php 的文件夹中,并创建一个可下载的存档。
这是代码
<?php
$zipname = 'test.zip';
$zip = new ZipArchive;
$zip->open('D://mypath//zip//$zipname', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php') && !strstr($entry,'.zip')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
header('Content-Type: application/zip');
header("Content-Disposition: attachment; filename=$zipname");
header('Content-Length: ' . filesize($zipname));
header("Location: $zipname");
?>
我想要实现的是 $zipname = "the name of the folder.zip"
所以,如果 php 在“/mypath/blablabla/”里面,我希望我的 zip $zipname 是 "blablabla.zip"
任何帮助将不胜感激!
编辑:
这是工作代码:
<?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);
?>
你可以使用 getcwd() :
http://php.net/manual/fr/function.getcwd.php
$zipname = getcwd();
它将 return 当前文件夹的路径,然后您可以对结果进行散列以仅获取文件夹的名称:
// We remove all the uneeded part of the path
$zipname = substr($zipname,strrpos($zipname,'\')+1);
//Then we add .zip to the result :
$zipname = $zipname.'.zip';
这应该可以解决问题。
如果您还想使用父文件夹的名称:
$zipname = getcwd();
// We remove the uneeded part of the path
$parentFolderPath = substr($zipname, 0,strrpos($zipname,'\'));
$parentFolder = substr($parentFolderPath, strrpos($parentFolderPath,'\')+1);
//Keep current folder name
$currentFolder = substr($zipname,strrpos($zipname,'\')+1);
//Join both
$zipname = $parentFolder.'_'.$currentFolder;
//Then we add .zip to the result :
$zipname = $zipname.'.zip';
您可以使用 readfile()
:
而不是使用 header()
重定向
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
readfile($zipname);
使用 basename()
时只向用户显示最后一部分,使用 readfile()
时你给出的是实际文件,无论它在哪里。
我是 php 的新手,我刚刚制作了我的第一个脚本,它工作正常,但缺少最后的润色。 该脚本将所有文件压缩到包含 php 的文件夹中,并创建一个可下载的存档。 这是代码
<?php
$zipname = 'test.zip';
$zip = new ZipArchive;
$zip->open('D://mypath//zip//$zipname', ZipArchive::CREATE);
if ($dir_handle = opendir('./')) {
while (false !== ($entry = readdir($dir_handle))) {
if ($entry != "." && $entry != ".." && !strstr($entry,'.php') && !strstr($entry,'.zip')) {
$zip->addFile($entry);
}
}
closedir($dir_handle);
}
else {
die('file not found');
}
$zip->close();
header('Content-Type: application/zip');
header("Content-Disposition: attachment; filename=$zipname");
header('Content-Length: ' . filesize($zipname));
header("Location: $zipname");
?>
我想要实现的是 $zipname = "the name of the folder.zip" 所以,如果 php 在“/mypath/blablabla/”里面,我希望我的 zip $zipname 是 "blablabla.zip"
任何帮助将不胜感激!
编辑: 这是工作代码:
<?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);
?>
你可以使用 getcwd() :
http://php.net/manual/fr/function.getcwd.php
$zipname = getcwd();
它将 return 当前文件夹的路径,然后您可以对结果进行散列以仅获取文件夹的名称:
// We remove all the uneeded part of the path
$zipname = substr($zipname,strrpos($zipname,'\')+1);
//Then we add .zip to the result :
$zipname = $zipname.'.zip';
这应该可以解决问题。
如果您还想使用父文件夹的名称:
$zipname = getcwd();
// We remove the uneeded part of the path
$parentFolderPath = substr($zipname, 0,strrpos($zipname,'\'));
$parentFolder = substr($parentFolderPath, strrpos($parentFolderPath,'\')+1);
//Keep current folder name
$currentFolder = substr($zipname,strrpos($zipname,'\')+1);
//Join both
$zipname = $parentFolder.'_'.$currentFolder;
//Then we add .zip to the result :
$zipname = $zipname.'.zip';
您可以使用 readfile()
:
header()
重定向
header('Content-Disposition: attachment; filename="'.basename($zipname).'"');
readfile($zipname);
使用 basename()
时只向用户显示最后一部分,使用 readfile()
时你给出的是实际文件,无论它在哪里。