Я думаю, что, возможно, я нашел программу PHP для загрузки файлов из определенной папки в мою учетную запись Dropbox. Полное решение можно найти здесь .
Код, похоже, работает, потому что загружаются файлы и папки. Тем не менее, я не хочу, чтобы файлы на моем сервере были сжаты заранее: я хочу скопировать все файлы с файлами и папками внутри.
Как можно изменить код? Все, что я хочу, – это скопировать определенный каталог с именем uploads from my server to dropbox. После изменения кода мне удалось получить этот код:
<?php // Set the timezone so filenames are correct date_default_timezone_set('Europe/London'); // Dropbox username/password $dropbox_email='dropbox@dropbox.com'; $dropbox_pass='password'; // Filenames for backup files $backup_files = "files_" . date("Ymd-his_l") . '.zip'; // File to backup $siteroot = "/site/home/public_html/website/parent/child/uploads/"; // Backup all files in public_html apart from the gz system("zip -r $backup_files $siteroot"); include("DropboxUploader.php"); $uploader = new DropboxUploader($dropbox_email, $dropbox_pass); $uploader->upload($backup_files,'Backup/Files/'); system("rm $backup_files"); ?>
Фактическое решение Особая благодарность Алирее Нури, халферу и всем остальным.
<?php // Set the timezone so filenames are correct date_default_timezone_set('Europe/London'); // Backup all files in public_html apart from the gz $siteroot = "/path/to/backup"; $dropbox_email='dropbox@email'; //Dropbox username $dropbox_pass='pass'; // Dropbox password include("DropboxUploader.php"); $uploader = new DropboxUploader($dropbox_email, $dropbox_pass); function FolderToDropbox($dir, $dropbox_link){ $dropbox_folder = 'FolderInDropboxRoot/'; $files = scandir($dir); foreach($files as $item){ if($item != '.' && $item != '..'){ if(is_dir($dir.'/'.$item)) FolderToDropbox($dir.'/'.$item,$dropbox_link); else if(is_file($dir.'/'.$item)) { $clean_dir = str_replace("/path/to/backup", "", $dir); $dropbox_link->upload($dir.'/'.$item,$dropbox_folder.$clean_dir.'/'); } } } } FolderToDropbox($siteroot,$uploader); ?>
в<?php // Set the timezone so filenames are correct date_default_timezone_set('Europe/London'); // Backup all files in public_html apart from the gz $siteroot = "/path/to/backup"; $dropbox_email='dropbox@email'; //Dropbox username $dropbox_pass='pass'; // Dropbox password include("DropboxUploader.php"); $uploader = new DropboxUploader($dropbox_email, $dropbox_pass); function FolderToDropbox($dir, $dropbox_link){ $dropbox_folder = 'FolderInDropboxRoot/'; $files = scandir($dir); foreach($files as $item){ if($item != '.' && $item != '..'){ if(is_dir($dir.'/'.$item)) FolderToDropbox($dir.'/'.$item,$dropbox_link); else if(is_file($dir.'/'.$item)) { $clean_dir = str_replace("/path/to/backup", "", $dir); $dropbox_link->upload($dir.'/'.$item,$dropbox_folder.$clean_dir.'/'); } } } } FolderToDropbox($siteroot,$uploader); ?>
Что предлагает @halfer – это (я только что изменил ваше потенциальное решение, основанное на его идее), поэтому он должен взять кредит:
<?php function uploadx($dirtocopy, $dropboxdir, $uploader){ if ($handle = opendir($dirtocopy)) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { if(is_dir($entry)){ uploadx($dirtocopy.$entry.'/', $dropboxdir.$entry.'/', $uploader); } else { $uploader->upload($dirtocopy.$entry, $dropboxdir.$entry); } } } closedir($handle); } } // Dropbox username/password $dropbox_email='dropbox@dropbox.com'; $dropbox_pass='password'; // File to backup $siteroot = "./"; include("DropboxUploader.php"); $uploader = new DropboxUploader($dropbox_email, $dropbox_pass); uploadx($siteroot, 'Backup/Files/', $uploader); ?>
в<?php function uploadx($dirtocopy, $dropboxdir, $uploader){ if ($handle = opendir($dirtocopy)) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { if(is_dir($entry)){ uploadx($dirtocopy.$entry.'/', $dropboxdir.$entry.'/', $uploader); } else { $uploader->upload($dirtocopy.$entry, $dropboxdir.$entry); } } } closedir($handle); } } // Dropbox username/password $dropbox_email='dropbox@dropbox.com'; $dropbox_pass='password'; // File to backup $siteroot = "./"; include("DropboxUploader.php"); $uploader = new DropboxUploader($dropbox_email, $dropbox_pass); uploadx($siteroot, 'Backup/Files/', $uploader); ?>
BTW, вышеприведенная функция: как сделать резервную копию файлов из определенного каталога в Dropbox с помощью PHP?
Вот фрагмент кода с сайта PHP, на который я указал вам комментарии. Все, что он делает, это взять путь к каталогу (как строку) и вывести полное имя пути для всех файлов внутри него (в виде нескольких строк). Это очень полезно, так как мы можем использовать эту возможность делать что-то в файлах на индивидуальной основе (например, загружать их в Dropbox).
<?php $path = realpath('/etc'); $objects = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST ); foreach($objects as $name => $object) { echo "$name\n"; }
Итак, поскольку вы хотите изучить PHP, и поскольку вы ничего не узнаете, если я дам вам готовое решение :-)
, попробуйте следующее:
system
вызов из вашего кода, так как вы не хотите выполнять сжатие $path
в моем коде на $siteroot
который вы используете в $siteroot
$path = ...
в моем коде (поскольку вы сами определяете $siteroot
) $objects
из моего кода после того, как вы определили $siteroot
, в свой код $uploader->upload()
в свой код с помощью цикла for
я предоставляю, удалив инструкцию echo из моего кода $name
на $backup_files
в своем коде Перемешайте все это немного, и это должно сработать. Удачи и не стесняйтесь задавать вопросы!
Как насчет использования версии командной строки dropbox? http://www.dropboxwiki.com/Using_Dropbox_CLI
Скопируйте файлы в папку Dropbox и дайте деамону делать то, что нужно.