我正在创建一个PHP备份脚本,将从数据库中转储所有内容并保存到文件中。我已经成功完成了这个过程,但现在我需要将一个目录中的数百张图像压缩成一个简单的.tar.gz文件。
最好的方法是什么?如何实现?我不知道从哪里开始。
先感谢您的帮助。
我正在创建一个PHP备份脚本,将从数据库中转储所有内容并保存到文件中。我已经成功完成了这个过程,但现在我需要将一个目录中的数百张图像压缩成一个简单的.tar.gz文件。
最好的方法是什么?如何实现?我不知道从哪里开始。
先感谢您的帮助。
$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";
}
if ($handle = opendir($images))
改为 if ($handle = opendir($images_dir))
吗? - johnsnails$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
exec('tar -czf backup.tar.gz /path/to/dir-to-be-backed-up/');请务必注意使用PHP的
exec()
函数时的警告。exec
、system
、shell_exec
等的服务器上运行? - AmirHussein我有一个简单的2行PHP文件,可以在几秒钟内创建备份ZIP文件:
只需浏览: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...';
?>
只需将此文件上传到服务器并直接浏览。
注:
<?
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();
}
D:\xampp\htdocs\myapp\zip-this-folder.php
D:\xampp\htdocs\myapp\index.php
D:\xampp\htdocs\myapp\assets\...
D:\xampp\htdocs\myapp\js\..
当调用:zip-this-folder.php时, 它将输出myapp.zip myapp.zip包含以下内容
- zip-this-folder.php
- index.php
- assets\...
- js\..
zip-this-folder.php:
echo $main_path = str_replace("\\", "/", __DIR__ );// get current folder, which call scipt
$zip_file = 'myapp.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 {
// special here: we remove root folder ("D:\xampp\htdocs\myapp\") :D
$new_filename = str_replace($main_path."/" , "", $p);
$zip->addFile($p, $new_filename);
$files++;
echo $p."<br>\n";
}
}
}
echo 'Total files: '.$files;
$zip->close();
}
您可以使用以下命令轻松地对文件夹进行gzip压缩:
tar -cvzpf backup.tar.gz /path/to/folder
这个命令可以通过php的system()函数运行。
不要忘记对所有命令进行escapeshellarg()转义处理。