2009-06-26 262 views
15

我正在创建一个php备份脚本,它将转储数据库中的所有内容并将其保存到文件中。我已经成功地做到了这一点,但现在我需要将数百个图像放在一个目录中,并将它们压缩成一个简单的.tar.gz文件。使用PHP压缩文件的目录

这样做的最好方法是什么?它是如何完成的?我不知道从哪里开始。

在此先感谢

+0

这可以帮助你http://codingbin.com/compressing-a-directory-of-files-与-php/ – MKD 2017-09-21 20:09:00

回答

15

如果你使用PHP 5.2或更高版本,你可以使用Zip Library

,然后做一些线沿线的:

$images_dir = '/path/to/images'; 
//this folder must be writeable by the server 
$backup = '/path/to/backup'; 
$zip_file = $backup.'/backup.zip'; 

if ($handle = opendir($images_dir)) 
{ 
    $zip = new ZipArchive(); 

    if ($zip->open($zip_file, ZIPARCHIVE::CREATE)!==TRUE) 
    { 
     exit("cannot open <$zip_file>\n"); 
    } 

    while (false !== ($file = readdir($handle))) 
    { 
     $zip->addFile($images_dir.'/'.$file); 
     echo "$file\n"; 
    } 
    closedir($handle); 
    echo "numfiles: " . $zip->numFiles . "\n"; 
    echo "status:" . $zip->status . "\n"; 
    $zip->close(); 
    echo 'Zip File:'.$zip_file . "\n"; 
} 
0

您可以轻松地gzip压缩使用该命令的文件夹:

tar -cvzpf backup.tar.gz /path/to/folder 

这个命令可以通过PHPS系统()跑出 - 功能。

不要忘记escapeshellarg()所有命令。

+0

谢谢亚历山大为你解答。这看起来像在PHP中?它会沿着这样的方向走: system('tar -cvzpf my_backup.tar.gz/images_water/images_rivers /'); – VinkoCM 2009-06-26 12:45:36

+0

是的,那样做。 – alexn 2009-06-26 13:00:01

+0

不幸的是,这对我不起作用,因为我的主机提供商已经对exec/system命令设置了安全限制。 – VinkoCM 2009-06-26 13:32:31

9

您也可以使用这样的事情:

 
exec('tar -czf backup.tar.gz /path/to/dir-to-be-backed-up/'); 

请务必heed the warnings关于使用PHP的exec()函数。通过我可以在几秒钟内创建一个备份ZIP文件

9
$archive_name = 'path\to\archive\arch1.tar'; 
$dir_path = 'path\to\dir'; 

$archive = new PharData($archive_name); 
$archive->buildFromDirectory($dir_path); // make path\to\archive\arch1.tar 
$archive->compress(Phar::GZ); // make path\to\archive\arch1.tar.gz 
unlink($archive_name); // deleting path\to\archive\arch1.tar 
1

我的简单的2线PHP文件:

只需浏览:http://mysiteurl.com/create-my-zip.php

<?php 
/* PHP FILE NAME: create-my-zip.php */ 

echo exec('tar zcf my-backup.tar.gz mydirectory/*'); 

echo '...Done...'; 

?> 

这个文件只需要上传到服务器和直接浏览。

注:

  • 'mydirectory中' ==>相对于该PHP脚本目标目录;
  • 'my-backup.tar.gz'==>将在PHP文件上传的同一目录下创建;
0

选的答案不支持递归(子目录),所以在这里你去:

<? 
ignore_user_abort(true); 
set_time_limit(3600); 


$main_path = 'folder2zip'; 
$zip_file = 'zipped.zip'; 

if (file_exists($main_path) && is_dir($main_path)) 
{ 
    $zip = new ZipArchive(); 

    if (file_exists($zip_file)) { 
     unlink($zip_file); // truncate ZIP 
    } 
    if ($zip->open($zip_file, ZIPARCHIVE::CREATE)!==TRUE) { 
     die("cannot open <$zip_file>\n"); 
    } 

    $files = 0; 
    $paths = array($main_path); 
    while (list(, $path) = each($paths)) 
    { 
     foreach (glob($path.'/*') as $p) 
     { 
      if (is_dir($p)) { 
       $paths[] = $p; 
      } else { 
       $zip->addFile($p); 
       $files++; 

       echo $p."<br>\n"; 
      } 
     } 
    } 

    echo 'Total files: '.$files; 

    $zip->close(); 
}