Попробуйте вручную запустить сценарий в SSH, и вы увидите, что сервер прерывает выполнение сценария, что приводит к отсутствию файлов в созданной папке.

я есть сервер и доменное имя наGoDaddy.

Я хочу создать резервную копию своих файлов для загрузки наГугл драйв

Так что все мои файлы и моя база данных имеют свои данные наГугл драйв.

я используюPHP а такжеMySQL для моей базы данных

После некоторых исследований я нашелАвтоматическое резервное копирование файлов вашего веб-сервера в GoogleDrive с помощью PHPи сделал то, что сказал.

Я скачал файлыgoogle-api-php-client изхранилище резервных копий googledrive.

И у меня естьID клиента, секрет клиента икод авторизации

Я отредактировал настройки. И я поставил свой собственныйID клиента, секрет клиента а такжекод авторизации, Я также положил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/"; 
 mohamad mohamad19 окт. 2017 г., 14:37
@DaImTo вы можете объяснить больше
 Don't Panic23 окт. 2017 г., 10:25
Я не вижу никакого кода, который создает папки, только.gz файлы. Вы можете уточнить?
 mohamad mohamad23 окт. 2017 г., 10:25
@ Don'tPanic да, это то, что я говорю
 Don't Panic23 окт. 2017 г., 10:16
Вы говорите, что это работает для резервного копирования папки базы данных, но не для файлов?
 mohamad mohamad20 окт. 2017 г., 07:37
Любое предложение ??!!

Ответы на вопрос(3)

па (доступно на VPS / выделенных серверах). Но на общем сервере, где root-доступ недоступен, этот сценарий прерывается сервером. Общие серверы имеют ограничения на максимальное время выполнения скрипта (обычно не более одной минуты - но зависит от хостинга)

Попробуйте вручную запустить сценарий в SSH, и вы увидите, что сервер прерывает выполнение сценария, что приводит к отсутствию файлов в созданной папке.

cf в твоем смоле? Разве это не должно бытьtar -cf? У вас естьtar cf, Я не думаю, что он распознает его как параметр команды, поэтому файл не создается.

 mohamad mohamad30 окт. 2017 г., 12:13
Input_file_or_directory что это должно быть ??
 mohamad mohamad30 окт. 2017 г., 07:44
я сделал то, что вы предлагаете shell_exec ("cd". $ homedir. "&& tar -cf -". $ sitedir. "-C". $ homedir. "| gzip -9>". $ homedir. $ fprefix. $ uid. ".tar.gz"); но у меня нет файла tar.gz
 Tamali30 окт. 2017 г., 11:02
Вы можете выбросить часть с помощью "gzip", если вы используете-z с помощью команды tar. Также я только что заметил, что проблема заключается в том, что нет никаких входных данных для tar. Использование смолы являетсяtar [OPTIONS] input_data, Так что у вас должно быть что-то вроде:shell_exec("cd" . $homedir . " && tar -czf " . $prefix.$uid . ".tar.gz input_file_or_directory");
 mohamad mohamad30 окт. 2017 г., 12:28
я пробовал вот так shell_exec ("cd". $ homedir. "&& tar -czf". $ sitedir. ". $ homedir. $ fprefix. $ uid.". tar.gz "); и вот такой shell_exec (" cd ". $ homedir." && tar -czf ". $ sitedir.". $ homedir. $ fprefix. ". tar.gz"); и тому подобное shell_exec ("cd". $ homedir. "&& tar -czf". $ prefix. $ uid. ". $ homedir. $ fprefix.". tar.gz "); и тому подобное shell_exec (" cd ". $ homedir. "&& tar -czf". $ prefix. $ uid. ". $ homedir.". tar.gz "); но я получаю ошибку HTTP ERROR 500
 Tamali30 окт. 2017 г., 12:19
В вашем случае, я думаю, это должен быть каталог, в котором вы храните файлы вашего сайта. Так что-то вроде:shell_exec("cd" . $homedir . " && tar -czf " . $prefix.$uid . ".tar.gz 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 правильно установлен с относительным путем (из домашнего каталога) к каталогу файлов сайта.

Это может быть что-то другое, чем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 и нетwww или жеhtml или что-нибудь еще. Проверьте это с помощью терминала.

 Paolo24 окт. 2017 г., 10:10
@mohamadmohamad Привет, я попробовал скрипт, и он отлично работает на моей машине. Я предполагаю$sitedir по-прежнему НЕ указывает на корневую папку сайта. Это поможет нам помочь вам, если вы сможете отредактировать свой вопрос и опубликовать структуру дерева каталогов.
 mohamad mohamad25 окт. 2017 г., 08:23
Я уверен, что корневым каталогом моего сайта является public_html / после того, как я изменил $ homedir, у меня нет файла .gz на моем сервере для базы данных или для резервного копирования сайта. Перед тем, как изменить $ homedir, в браузере должно появиться это сообщение. Эта страница не работает, в настоящее время не может обработать этот запрос. HTTP ERROR 500, но после того, как я изменил $ homedir, я не получаю эту ошибку, а также страницу обычно загружается без какого-либо сообщения об ошибке
 mohamad mohamad24 окт. 2017 г., 08:07
спасибо за ваш ответ, я сделал то, что вы предлагаете, я изменил $ sitedir на public_html /, а также я уже сделал до $ homedir, я положил на него абсолютный путь к домашнему каталогу, но проблема еще не решена, когда я загружаю файл резервная копия сайта пуста, но для моей базы данных у меня есть файл с данными базы данных
 Paolo24 окт. 2017 г., 16:54
@mohamadmohamad см. мой обновленный ответ
 mohamad mohamad24 окт. 2017 г., 13:59
пожалуйста, проверьте выше, я положил $ sitedir и $ homedir

Ваш ответ на вопрос