Exemplo n.º 1
0
 /**
  * Try to backup data in memory
  *
  * @return string Returns a message describing the result
  */
 public function rescueData()
 {
     $resultMessageParts = array();
     $data = $this->coordinator instanceof Coordinator ? $this->coordinator->getObjectStore() : array();
     $backupDirectory = $this->getRescueDirectory();
     if ($data) {
         foreach ($data as $databaseIdentifier => $database) {
             $currentData = NULL;
             if ($database instanceof Database) {
                 $currentData = $database->getRawData();
             } else {
                 if ($database instanceof \Iterator) {
                     $currentData = iterator_to_array($database);
                 }
             }
             if (!$currentData) {
                 $resultMessageParts[] = sprintf('Can not rescue database %s', $databaseIdentifier);
                 continue;
             }
             $backupData = NULL;
             $jsonData = json_encode($currentData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
             if ($jsonData) {
                 $backupData = $jsonData;
             } else {
                 $backupData = serialize($currentData);
             }
             $backupPath = $backupDirectory . $databaseIdentifier . '.' . ($jsonData ? 'json' : 'bin');
             if (file_put_contents($backupPath, $backupData)) {
                 $resultMessageParts[] = sprintf('Created backup of database %s at %s', $databaseIdentifier, $backupPath);
             } else {
                 $resultMessageParts[] = sprintf('Can not rescue database %s', $databaseIdentifier);
             }
         }
     } else {
         $resultMessageParts[] = sprintf('Can not find any data to rescue');
     }
     return implode(PHP_EOL, $resultMessageParts);
 }