Рекурсивный сценарий резервного копирования PHP

Я написал базовую систему управления контентом для своего веб-сайта, включая панель администрирования. Я понимаю базовый файл 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, но я хочу полностью серверное решение, к которому можно получить доступ в любом месте с достаточной авторизацией.

    Вот альтернатива: почему бы вам не вместо Zip исходный каталог ?

     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-файла.

    если у вас есть доступ к исполняемому двоичному файлу tar через функцию exec, это будет быстрее и лучше, я думаю:

     exec('tar -zcvf ' . realpath('some directory') .'/*); 

    или

     chdir('some directory') exec('tar -zcvf ./*'); 

    Вы можете использовать рекурсию.

     for(scandir($dir) as $dir_contents){ if(is_dir($dir_contents)){ backup($dir_contents); }else{ //back up the file } } 

    вы получили это почти правильно

     $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 () из-за более согласованного вывода

    Я что-то назвал UPHP. Просто вызовите zip() чтобы сделать это. Вот:

     <?php include "uphplib.php"; $folder = "data"; $dest = "backup/backup.zip"; zip($folder, $dest); ?> 

    UPHP – это библиотека PHP. скачать: здесь

    Вот сценарий резервного копирования с возможностями ftp, scp, mysqldump, pg_dump и файловой системы https://github.com/skywebro/php-backup

    Я использую простую функцию для резервного копирования файла:

     <?php $oldfile = 'myfile.php'; $newfile = 'backuped.php'; copy($oldfile, $newfile) or die("Unable to backup"); echo 'Backup is Completed'; ?>