使用PHP将文件备份到Google驱动器

j7dteeu8  于 2023-01-16  发布在  PHP
关注(0)|答案(5)|浏览(123)

我在GoDaddy上有一个服务器和域名。
我想为要上载到Google Drive上的文件创建备份
这样我所有的文件和数据库的数据都在Google Drive上。
我对数据库使用PHPMySQL
经过一番研究,我找到了"Automatically backing up your web server files to GoogleDrive with PHP",并按他说的做了。
我已经从backuptogoogledrive repository下载了google-api-php-client文件。
我有***客户ID***、客户密码***和***authCode
我编辑了www.example.com,并输入了我自己的***客户端ID***、客户端密码***和***authCode,还输入了我的MySQL用户名、密码和主机名。setting.inc and I put my own***client ID***,client secret***and***authCode. I also put my MySQL username, password and hostname.
在这个backuptogoogledrive页面中,它应该创建一个.tar.gz文件夹,这个文件夹 * 应该 * 包含我的网站文件。然后,这个文件夹应该上传到我的Google Drive,并为我的数据库做同样的事情。

<?php
  set_time_limit(0);
  ini_set('memory_limit', '1024M'); 
  require_once("google-api-php-client/src/Google_Client.php");
  require_once("google-api-php-client/src/contrib/Google_DriveService.php");
  include("settings.inc.php");

  if($authCode == "") die("You need to run getauthcode.php first!\n\n");

  /* PREPARE FILES FOR UPLOAD */

  // Use the current date/time as unique identifier
  $uid = date("YmdHis");
  // Create tar.gz file
  shell_exec("cd ".$homedir." && tar cf - ".$sitedir." -C ".$homedir." | gzip -9 > ".$homedir.$fprefix.$uid.".tar.gz");
  // Dump datamabase
  shell_exec("mysqldump -u".$dbuser." -p".$dbpass." ".$dbname." > ".$homedir.$dprefix.$uid.".sql");
  shell_exec("gzip ".$homedir.$dprefix.$uid.".sql");

  /* SEND FILES TO GOOGLEDRIVE */

  $client = new Google_Client();
  // Get your credentials from the APIs Console
  $client->setClientId($clientId);
  $client->setClientSecret($clientSecret);
  $client->setRedirectUri($requestURI);
  $client->setScopes(array("https://www.googleapis.com/auth/drive"));
  $service = new Google_DriveService($client);  
  // Exchange authorisation code for access token
  if(!file_exists("token.json")) {
    // Save token for future use
    $accessToken = $client->authenticate($authCode);      
    file_put_contents("token.json",$accessToken);  
  }
  else $accessToken = file_get_contents("token.json");
  $client->setAccessToken($accessToken);  
  // Upload file to Google Drive  
  $file = new Google_DriveFile();
  $file->setTitle($fprefix.$uid.".tar.gz");
  $file->setDescription("Server backup file");
  $file->setMimeType("application/gzip");
  $data = file_get_contents($homedir.$fprefix.$uid.".tar.gz");
  $createdFile = $service->files->insert($file, array('data' => $data, 'mimeType' => "application/gzip",));
  // Process response here....
  print_r($createdFile);      
  // Upload database to Google Drive
  $file = new Google_DriveFile();
  $file->setTitle($dprefix.$uid.".sql.gz");
  $file->setDescription("Database backup file");
  $file->setMimeType("application/gzip");
  $data = file_get_contents($homedir.$dprefix.$uid.".sql.gz");
  $createdFile = $service->files->insert($file, array('data' => $data, 'mimeType' => "application/gzip",));
  // Process response here....
  print_r($createdFile);  

  /* CLEANUP */

  // Delete created files
  unlink($homedir.$fprefix.$uid.".tar.gz");
  unlink($homedir.$dprefix.$uid.".sql.gz");

?>

现在的问题是,我有两个数据库文件夹,数据库上没有问题,还有一个文件夹,但是这个文件夹上没有任何文件。
我怎样才能解决这个问题?
第一节第一节第一节第一节第一次

// User home directory (absolute)
  $homedir = "/home/mhmd2991/public_html/"; // If this doesn't work, you can provide the full path yourself
  // Site directory (relative)
  $sitedir = "public_html/";
t0ybt7op

t0ybt7op1#

备份脚本似乎无法找到存储站点文件的目录。
引用您执行备份所遵循的教程:

// User home directory (absolute)
$homedir = trim(shell_exec("cd ~ && pwd"))."/"; // If this doesn't work, you can provide the full path yourself
// Site directory (relative)
$sitedir = "www/";

首先确保$sitedir已正确设置为站点文件目录的相对路径(从主目录)。
它可以是不同于www/的东西,例如public_html/用于托管在GoDaddy上的网站。
如果上述内容正确,请尝试使用主目录的绝对路径手动设置$home变量。

    • 更新**

$homedir是主目录,$sitedir是相对于$homedir的网站根目录
因此,查看您发布的代码很可能存在错误,这两个变量应为:

// User home directory (absolute)
$homedir = "/home/mhmd2991/"; // <-- FIXED HERE
// Site directory (relative)
$sitedir = "public_html/";

假设您的网站根目录为public_html,并且位于主目录mhmd2991
再次确认你的网站根目录确实是public_html而不是wwwhtml或其他任何东西。

j1dl9f46

j1dl9f462#

在GoDaddy,或任何其他平台.共享主机一般不提供shell访问或不允许ssh访问.很多时候,你会遇到问题运行命令在shell中,因为shell可执行命令被主机提供商禁止.
这有助于他们提供资源,所有的共享主机用户在一个更好的方式,而不会妨碍彼此的隔离.
您仍然可以在不同的主机平台上看到打开SSH的选项和其他类似的shell访问选项。请参阅下面的链接在GoDaddy https://in.godaddy.com/help/enable-ssh-for-my-linux-hosting-account-16102上激活SSH

u4vypkhs

u4vypkhs3#

难道你没有忘记tar中cf前面的一个连字符吗?它不应该是tar -cf吗?你有tar cf。我认为它没有把它识别为命令参数,所以没有创建文件。

qlvxas9a

qlvxas9a4#

我可以在使用根访问权限(在VPS /专用服务器中可用)时成功运行此脚本。但在共享服务器中,根访问权限不可用,此脚本被服务器中止。共享服务器对脚本可以运行的最长时间有限制(通常不超过一分钟-但取决于主机)
尝试在SSH中手动运行该脚本,您将看到服务器中止了该脚本,导致文件夹中没有创建任何文件。

cbeh67ev

cbeh67ev5#

大多数高质量的托管站点允许用户存档他们的程序文件/目录/站点。同样,如果你使用数据库,数据库程序通常有一个链接,你可以在那里存档和/或导出表格或整个数据库。你将不得不寻找如何做到这一点的说明,因为它在平台和数据库系统以及托管站点之间是不同的。
一旦你存档了你的文件/目录/站点和/或数据库,你可以使用FTP程序将它们导出到你的计算机。同样,你可以将它们复制到另一台计算机或云。
我的首选是将任何我想导出的内容存档到zip或tar文件中。出于安全原因,我也更喜欢将我的数据库文件保存到外部驱动器或将它们放在可录制的DVD上。

相关问题