如何仅使用PHP将文件从特定目录备份到Dropbox? [英] How to backup files from a specific directory to Dropbox using PHP only?
问题描述
我想创建一个PHP脚本来将文件从网站上的特定目录备份到我的Dropbox帐户.
I would like to create a PHP script to backup files from a particular directory on my website to my Dropbox account.
我试图搜索示例以及如何解决它,但是我只找到了备份数据库或购买现成解决方案的代码.
I tried to search for examples and how to work around it but I only found code to backup databases or to buy ready made solutions.
这是我尝试的代码
<?php
$passw = "jason"; //change this to a password of your choice.
if ($_POST) {
require 'DropboxUploader.php';
try {
// Rename uploaded file to reflect original name
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK)
throw new Exception('File was not successfully uploaded from your computer.');
$tmpDir = uniqid('/tmpCapes/');
if (!mkdir($tmpDir))
throw new Exception('Cannot create temporary directory!');
if ($_FILES['file']['name'] === "")
throw new Exception('File name not supplied by the browser.');
$tmpFile = $tmpDir.'/'.str_replace("/\0", '_', $_FILES['file']['name']);
if (!move_uploaded_file($_FILES['file']['tmp_name'], $tmpFile))
throw new Exception('Cannot rename uploaded file!');
if ($_POST['txtPassword'] != $passw)
throw new Exception('Wrong Password');
// Upload
$uploader = new DropboxUploader('user@example.com', 'password');// enter dropbox credentials
$uploader->upload($tmpFile, $_POST['dest']);
echo '<span style="color: green;font-weight:bold;margin-left:393px;">File successfully uploaded to my Dropbox!</span>';
} catch(Exception $e) {
echo '<span style="color: red;font-weight:bold;margin-left:393px;">Error: ' . htmlspecialchars($e->getMessage()) . '</span>';
}
// Clean up
if (isset($tmpFile) && file_exists($tmpFile))
unlink($tmpFile);
if (isset($tmpDir) && file_exists($tmpDir))
rmdir($tmpDir);
}
?>
但是不是通过我的网站将图像从我的PC上传到Dropbox.我想修改上面的代码,以将网站上特定目录中的文件复制到Dropbox.
But instead of uploading the image from my PC to Dropbox via my website. I want to modify the above code to copy files in a specific directory on my website to Dropbox.
推荐答案
您需要递归代码.
编写一个以dir作为参数的函数.
Write a function that takes a dir as its argument.
让它遍历目录查看每个文件.对于每个文件,它都会检查它是否为目录,如果不是,则将其复制.
Have it loop through the dir looking at each file. For each file, it checks if it's a dir, and if it's not, it copies it.
如果它是一个目录,则该函数将自行调用.
If it is a dir, the function calls itself.
例如
// your code
require 'DropboxUploader.php';
$dirtocopy = './example_directory/';
$dropboxdir = 'backupdir/';
$uploader = new DropboxUploader('sample-email@gmail.com', 'password');// enter dropbox credentials
$errors = array(); // to store errors.
// function definition
function copyDirRecursive($dir) {
global $uploader; // makes the "$uploader" below the one from outside the function
if(is_dir($dir)) { // added if/else to check if is dir, and create handle for while loop
$handle = opendir($dir);
if($handle === false) { // add if statements like this wherever you want to check for an error
$errors[] = $php_errormsg; // http://php.net/manual/en/reserved.variables.phperrormsg.php
}
} else {
return false;
}
while(false !== ($file = readdir($handle))) { // changed foreach to while loop
if(!isdir($file)) {
// copy the file
// cp $dir . '/' . $file to $dropbox . '/' . $dir . '/' . $file; // pseudocode
// below is actual code that hopefully will work
$uploader->upload($dir.$file,$dropboxdir.$file);
} else {
if(!is_link($file)) { // probably best not to follow symlinks, so we check that with is_link()
copyDirRecursive($dir . '/' . $file); // recursion time
}
}
}
}
// CALL THE FUNCTION
copyDirRecursive($dirtocopy); // you have to call a function for it to do anything
print_r($errors); // use this or var_dump($errors) to see what errors came up
这篇关于如何仅使用PHP将文件从特定目录备份到Dropbox?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!