Как скопировать файлы с сервера на Dropbox с помощью PHP?

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

  1. Удалите system вызов из вашего кода, так как вы не хотите выполнять сжатие
  2. Получите фрагмент, который я предоставил для работы на вашем компьютере (он будет работать сам по себе), изменив «/ etc» на любой путь, который вы хотите
  3. Измените $path в моем коде на $siteroot который вы используете в $siteroot
  4. Удалите строку $path = ... в моем коде (поскольку вы сами определяете $siteroot )
  5. Повторно проверьте фрагмент
  6. Добавьте строку $objects из моего кода после того, как вы определили $siteroot , в свой код
  7. Оберните строку $uploader->upload() в свой код с помощью цикла for я предоставляю, удалив инструкцию echo из моего кода
  8. Измените $name на $backup_files в своем коде

Перемешайте все это немного, и это должно сработать. Удачи и не стесняйтесь задавать вопросы!

Как насчет использования версии командной строки dropbox? http://www.dropboxwiki.com/Using_Dropbox_CLI

Скопируйте файлы в папку Dropbox и дайте деамону делать то, что нужно.