6

特定のフォルダから Dropbox アカウントにファイルをアップロードする PHP プログラムを見つけたのかもしれません。完全な解決策はここにあります。

ファイルやフォルダーがアップロードされているため、コードは機能しているようです。ただし、サーバー上のファイルを事前に圧縮したくありません。ファイルとフォルダーを含むすべてのファイルをコピーしたいのです。

コードをどのように変更できますか?私が望むのは、アップロードと呼ばれる特定のディレクトリをサーバーからドロップボックスにコピーすることだけです。コードを変更した後、私はこのコードにたどり着きました:

    <?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("Y.m.d-h.i.s_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");

    ?>

実際の解決策 Alireza Noori、Halfer、および他のすべての人に感謝します。

<?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);

?>
4

3 に答える 3

3

@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);

?>

ところで、上記の関数はここからのものです: How to backup files from a specific directory using PHP only?

于 2013-03-20T00:05:04.777 に答える
2

以下は、コメントで指摘した 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
  4. コードの行を削除し$path = ...ます (自分で定義するため$siteroot)
  5. スニペットをもう一度テストする
  6. $objectsを定義した後、私のコードからの行をコードに追加し$siterootます
  7. $uploader->upload()私が提供するループでコードの行をラップしfor、コードから echo ステートメントを削除します
  8. コードでに変更$name$backup_filesます

それを少し揺すってください。うまくいくはずです。どうぞお気軽にご質問ください。

于 2013-03-19T23:20:57.190 に答える
0

コマンド ライン バージョンの Dropbox の使用についてはどうですか? http://www.dropboxwiki.com/Using_Dropbox_CLI

ファイルをドロップボックス フォルダにコピーし、必要なことをデーモンに任せます。

于 2013-03-19T17:31:30.897 に答える