我想我可能找到了一个PHP程序,用于将文件从特定文件夹上传到我的Dropbox帐户。可以找到完整的解决方案here。
代码似乎有效,因为正在上传文件和文件夹。但是,我不希望事先压缩我服务器上的文件:我想要复制包含文件和文件夹的所有文件。
如何修改代码?我想要的只是将一个名为uploads的特定目录从我的服务器复制到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("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);
?>
答案 0 :(得分: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 to Dropbox using PHP only?
答案 1 :(得分: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,并且因为如果我给你一个现成的解决方案:-)
你将不会学到任何东西,请尝试以下方法:
system
来电,因为您不想进行任何压缩$path
更改为您在其中使用的$siteroot
$path = ...
行(因为您自己定义$siteroot
)$objects
之后,在我的代码中添加$siteroot
行$uploader->upload()
循环将代码中的for
行换行,从代码中删除echo语句$name
更改为$backup_files
稍微摇晃一下,它应该有效。祝你好运,随时提问!
答案 2 :(得分:0)
使用dropbox的命令行版本怎么样? http://www.dropboxwiki.com/Using_Dropbox_CLI
将文件复制到dropbox文件夹,让deamon完成它需要做的事情。