我为我的网站编写了一个基本的内容管理系统,包括一个管理面板。我理解基本文件IO以及通过PHP进行复制,但是我对从脚本调用的备份脚本的尝试失败了。我试过这样做:
//... authentication, other functions
for(scandir($homedir) as $buffer){
if(is_dir($buffer)){
//Add $buffer to an array
}
else{
//Back up the file
}
}
for($founddirectories as $dir){
for(scandir($dir) as $b){
//Backup as above, adding to $founddirectories
}
}
但它似乎没有用。
我知道我可以使用FTP做到这一点,但我想要一个完全服务器端的解决方案,只要有足够的授权就可以在任何地方访问。
答案 0 :(得分:9)
这是另一种选择:你为什么不Zip the source directory instead?
function Zip($source, $destination)
{
if (extension_loaded('zip') === true)
{
if (file_exists($source) === true)
{
$zip = new ZipArchive();
if ($zip->open($destination, ZIPARCHIVE::CREATE) === true)
{
$source = realpath($source);
if (is_dir($source) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file)
{
$file = realpath($file);
if (is_dir($file) === true)
{
$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
}
else if (is_file($file) === true)
{
$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
}
}
}
else if (is_file($source) === true)
{
$zip->addFromString(basename($source), file_get_contents($source));
}
}
return $zip->close();
}
}
return false;
}
您甚至可以将其解压缩并存档相同的效果,但我必须说我更喜欢以zip文件格式压缩我的备份。
答案 1 :(得分:4)
如果你有权通过exec函数执行tar二进制文件,我认为它会更快更好:
exec('tar -zcvf ' . realpath('some directory') .'/*);
或
chdir('some directory')
exec('tar -zcvf ./*');
答案 2 :(得分:2)
您可以使用递归。
for(scandir($dir) as $dir_contents){
if(is_dir($dir_contents)){
backup($dir_contents);
}else{
//back up the file
}
}
答案 3 :(得分:2)
你得到的几乎是正确的
$dirs = array($homedir);
$files = array();
while(count($dirs)) {
$dir = array_shift($dirs);
foreach(glob("$dir/*") as $e)
if(is_dir($e))
$dirs[] = $e;
else
$files[] = $e;
}
// here $files[] contains all files from $homedir and below
glob()比scandir()更好,因为输出更加一致
答案 4 :(得分:1)
我称之为UPHP。只需致电zip()
即可。这里:
<?php
include "uphplib.php";
$folder = "data";
$dest = "backup/backup.zip";
zip($folder, $dest);
?>
UPHP是一个PHP库。下载:here
答案 5 :(得分:1)
这是一个备份脚本,包含ftp,scp,mysqldump,pg_dump和文件系统功能https://github.com/skywebro/php-backup
答案 6 :(得分:0)
我使用一个简单的函数来备份文件:
<?php
$oldfile = 'myfile.php';
$newfile = 'backuped.php';
copy($oldfile, $newfile) or die("Unable to backup");
echo 'Backup is Completed';
?>