如何仅使用PHP将文件从特定目录备份到Dropbox? [英] How to backup files from a specific directory to Dropbox using PHP only?

查看:64
本文介绍了如何仅使用PHP将文件从特定目录备份到Dropbox?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆