提问人:mohamad mohamad 提问时间:10/19/2017 最后编辑:Shadowmohamad mohamad 更新时间:5/7/2023 访问量:7576
使用PHP将文件备份到Google云端硬盘
backup files to google drive using PHP
问:
我在 GoDaddy 上有服务器和域名。
我想为我的文件创建备份,以便上传到 Google 云端硬盘
因此,我的所有文件和数据库的数据都在Google云端硬盘上。
我使用和用于我的数据库PHP
MySQL
经过一番研究,我发现“使用 PHP 自动将您的 Web 服务器文件备份到 GoogleDrive”并按照他说的做了。
我已经从backuptogoogledrive存储库下载了文件。google-api-php-client
我有一个客户端 ID、客户端密钥和一个 authCode
我编辑了setting.inc,并输入了我自己的客户端ID,客户端密钥和authCode。我还输入了我的用户名、密码和主机名。MySQL
在此页面中,它应该创建一个文件夹,该文件夹应包含我的网站文件。然后,这个文件夹应该把它上传到我的谷歌云端硬盘,并为我的数据库做同样的事情。backuptogoogledrive
.tar.gz
<?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/";
答:
备份脚本似乎找不到存储站点文件的目录。
引用您遵循的教程进行备份:
// 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
它可能与 不同,例如,对于托管在 GoDaddy 上的网站。www/
public_html/
如果以上是正确的,请尝试使用主目录的绝对路径手动设置变量。$home
更新
$homedir
是主目录,是相对于$sitedir
$homedir
所以看你发布的代码很有可能有错误,两个变量应该是:
// User home directory (absolute)
$homedir = "/home/mhmd2991/"; // <-- FIXED HERE
// Site directory (relative)
$sitedir = "public_html/";
这假设您的网站根目录位于您的主目录中public_html
mhmd2991
再次确保您的网站根目录实际上是,而不是或其他任何东西。使用终端检查一下。public_html
www
html
评论
$sitedir
;
php_error.log
你不会错过焦油前面的连字符吗?不是应该的吗?你有。我不认为它将其识别为命令参数,因此没有创建文件。cf
tar -cf
tar cf
评论
-z
tar [OPTIONS] input_data
shell_exec("cd" . $homedir . " && tar -czf " . $prefix.$uid . ".tar.gz input_file_or_directory");
shell_exec("cd" . $homedir . " && tar -czf " . $prefix.$uid . ".tar.gz public_html/");
我能够在使用root访问权限(在VPS /专用服务器中可用)时成功运行此脚本。但是在共享服务器中,如果 root 访问权限不可用,则此脚本会被服务器中止。共享服务器对脚本可以运行的最长时间有限制(通常不到一分钟 - 但取决于主机)
尝试在SSH中手动运行脚本,您将看到该脚本被服务器中止,这导致创建的文件夹中没有文件。
在 GoDaddy 或任何其他平台中。共享主机通常不提供 shell 访问或不允许 ssh 访问。很多时候,您将在 shell 中运行命令时遇到问题,因为托管服务提供商禁止 shell 可执行命令。
这有助于他们以更好的方式向所有共享主机用户提供资源,而不会妨碍彼此的隔离。
您仍然可以在不同的托管平台中看到启用 SSH 和其他类似 shell 访问选项的选项。 请参阅以下链接以在 GoDaddy https://in.godaddy.com/help/enable-ssh-for-my-linux-hosting-account-16102 上激活 SSH
大多数高质量的托管站点允许用户存档他们的程序文件/目录/站点。同样,如果您使用的是数据库,则数据库程序通常有一个链接,您可以在其中存档和/或导出表或整个数据库。您必须寻找有关如何执行此操作的说明,因为它因平台和数据库系统以及托管站点而异。
存档文件/目录/站点和/或数据库后,您可以使用FTP程序将它们导出到计算机。同样,您可以将它们复制到另一台计算机或云中。
我的偏好是将我想导出的任何内容存档到 zip 或 tar 文件中。出于安全原因,我也更喜欢将数据库文件保存到外部驱动器或将它们放在可刻录的 DVD 上。
评论
.gz