⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.89
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-pear
/
pear
/
php
/
Horde
/
Backup
/
Edit File: Writer.php
<?php /** * Copyright 2017 Horde LLC (http://www.horde.org/) * * See the enclosed file LICENSE for license information (BSD). If you * did not receive this file, see http://www.horde.org/licenses/bsd. * * @author Jan Schneider <jan@horde.org> * @category Horde * @license http://www.horde.org/licenses/bsd BSD * @package Backup */ namespace Horde\Backup; use Horde_Compress_Tar as Tar; use Horde_Compress_Zip as Zip; use Horde_Pack_Driver_Json as Json; use Horde\Backup; use Horde\Backup\Exception; use Horde\Backup\Translation; use Horde\Backup\Users; /** * The backup writer class that writes backups to the backup directory. * * @author Jan Schneider <jan@horde.org> * @category Horde * @copyright 2017 Horde LLC * @license http://www.horde.org/licenses/bsd BSD * @package Backup */ class Writer { /** * Backup directory. * * @var string */ protected $_dir; /** * Handles for backup data. * * @var array */ protected $_backups = array(); /** * Constructor. * * @param string $directory Backup directory. */ public function __construct($directory) { if (!Json::supported()) { throw new Exception(Translation::t("JSON serializer not available")); } $this->_dir = $directory; if (!strlen($this->_dir)) { throw new Exception(Translation::t("Empty directory name")); } if (!file_exists($this->_dir)) { mkdir($this->_dir, 0777, true); } if (!is_dir($this->_dir)) { throw new Exception( sprintf(Translation::t("%s is not a directory"), $this->_dir) ); } if (!is_readable($this->_dir) || !is_writable($this->_dir)) { throw new Exception( sprintf(Translation::t("Access denied to %s"), $this->_dir) ); } } /** * Adds backups of user data. * * @param string $application Application name. * @param \Horde\Backup\Users $users User(s) (and their data) to backup. */ public function backup($application, Users $users) { if ($users) { $this->_backups[$application] = $users; } } /** * Saves the backups. * * @param integer $format The backup format, one of the Backup::FORMAT_* * constants. * * @return integer Number of processed items. */ public function save($format = Backup::FORMAT_ZIP) { $backups = array(); foreach ($this->_backups as $application => $users) { foreach ($users as $user) { $backups[$user->user][$application] = $user; } } switch ($format) { case Backup::FORMAT_ZIP: $compress = new Zip(); $extension = '.zip'; break; case Backup::FORMAT_TAR: $compress = new Tar(); $extension = '.tar'; break; default: throw new Exception(Translation::t("Unsupported archive type")); } $packer = new Json(); $count = 0; foreach ($backups as $name => $applications) { $data = array(); foreach ($applications as $application => $backup) { foreach ($backup->collections as $collection) { $dir = $application . '/' . $collection->getType() . '/'; foreach ($collection as $id => $object) { $stream = fopen('php://temp', 'w+'); fwrite($stream, $packer->pack($object)); $data[] = array( 'name' => $dir . $id, 'data' => $stream ); $count++; } } } if (!$data) { continue; } $archive = fopen($this->_dir . '/' . $name . $extension, 'w'); stream_copy_to_stream( $compress->compress($data, array('stream' => true)), $archive ); fclose($archive); } return $count; } }
Simpan