这是我在互联网上找到的代码,旨在创建整个文件夹的.zip并下载。
我想做一些改变,但我尝试的一切都不起作用。我想要的是什么:
使它成为通用的(即我希望在根文件夹中有makezip.php
。我是文件管理员,每次我从某个位置调用此脚本(例如www.domain.com/files/media/images/
它获取该文件夹)。
下载后删除zip(我认为我做得很好,使用了命令unlink
,但我不确定这是正确的方法。
删除该zip文件夹中的.
和..
文件夹。
导出名为date.hour.directory.zip
(ex 18Sep2013_13-26-02_images.zip
)的zip。我试着这样做
$fd = getcwd();
$filename = date("dMY_H:i:s").'_'.$fd.'.zip';
但它没有用,它只获得$ fd变量。
我知道它不应该给你所有的代码,并期望你会看到它或调试它,但我已经尝试了一切,没有任何工作。我自己学习,而且我在php上有点新手。
祝你好运
<?php
function download($file) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
unlink($file);
exit;
}
$directory = '.';
$files = scandir($directory);
if(empty($files))
{
echo("You haven't selected any file to download.");
}
else
{
$zip = new ZipArchive();
$filename = date("dMY_H:i:s").'_arquivo.zip'; //adds timestamp to zip archive so every file has unique filename
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { // creates new zip archive
exit("Cannot open <$filename>\n");
}
$N = count($files);
for($i=0; $i < $N; $i++)
{
$zip->addFile($files[$i], $files[$i]); //add files to archive
}
$numFiles = $zip->numFiles;
$zip->close();
$time = 8; //how long in seconds do we wait for files to be archived.
$found = false;
for($i=0; $i<$time; $i++){
if($numFiles == $N){ // check if number of files in zip archive equals number of checked files
download($filename);
$found = true;
break;
}
sleep(1); // if not found wait one second before continue looping
}
if($found) { }
else echo "Sorry, this is taking too long";
}
?>
答案 0 :(得分:0)
好的,我自己已经找到了问题,而且我正在为那些想要的人分享解决方案。
我修改了index.php上的代码,并对zip.php进行了一些更改(处理压缩过程的文件。简单解决方案..笨蛋!
1 - index.php - 只需输入一个简单的链接
<a href="zip.php?dirz=HERE_GOES_THE_FOLDER_URL">Download folder as a .zip</a>
2 - zip.php
$directory = $_REQUEST['dirz'];
是的,这是对的。 (在zip.php上)
unlink($ZIPNAME);
$direct = array_diff(scandir($directory), array(".","..","error_log"));
foreach($direct as $file){
if(is_file($directory.'/'.$file)){
$zip->addFile($directory.'/'.$file, $file);
}
}
简单如下:
$zipname = date("dMY_H-i-s").'_'.basename($directory).'.zip';
祝你好运