HEX
Server: Apache/2.4.67 (Debian)
System: Linux hosting103 6.1.0-49-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
User: muzikaecom (1013)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //usr/local/share/hostingplatform/scripts/__snapshotHostingPackage
#!/usr/bin/env php
<?php
require_once dirname(__FILE__) . '/Utils.class.php';
require_once("/usr/local/share/hostingplatform/esrpc.php");

$server = new ESRPCConnection();
$worker = new Worker($server->get());
$server->setTarget($worker);
$server->connect();
$server->serve();


class Worker {
	var $api;
	var $snapshots = '/var/local/hostingplatform/snapshots';

	function __construct($api) {
		$this->api = $api;
	}

	function run($packagename) {
		// Check hostingpackage existence...
		if (!$this->api->__checkIfHostingPackageExists($packagename))
			throw new Exception(
				"Hostingpackage '$packagename' does not exist!"
			);

		$base = $packagename . '/' . date("Y_m_d-H_i_s");
		$curr = $this->snapshots . '/' . $packagename . '/current';
		$path = $this->snapshots . '/' . $base;

		// Check target dir existence...
		if (!is_dir($path)) {
			if (!mkdir($path, 0755, true)) throw new Exception(
				"Unable to create parent dir for archive " .
				"'$path'"
			);
		}

		// Find user information (for homedir)...
		if (($user = posix_getpwnam($packagename)) === false) throw new Exception(
			"Unable to get information for user '$packagename'!"
		);

		// Backup homedir
		Utils::rsync($user['dir'] . '/.', $path . "/files", $curr . "/files");

		foreach ($this->api->listMySQLDatabases($packagename) as $database) {

			$tables = $this->api->listMySQLTables($database);
			foreach($tables as $table => $table_details) {
				$table_modified = (int)str_replace(":", "", str_replace("-", "", str_replace(" ", "", $table_details["modified"])));
                                if(!is_file($curr . "/databases/mysql/" . $database . "/" . $table . ".sql") ||
				   date("YmdHis",filectime($curr . "/databases/mysql/" . $database . "/" . $table . ".sql")) < $table_modified) {
					Utils::dumpMySQLTable($database, $table, $path . "/databases/mysql/" . $database . "/" . $table . ".sql");
				}
				else {
					if (!is_dir($path . "/databases/mysql/" . $database . "/")) {
						if (!mkdir($path . "/databases/mysql/" . $database . "/", 0770, true)) throw new Exception(
							"Unable to create parent dir for MySQL dump '" . $path . "/databases/mysql/" . $database . "/'");
					}
					link(
						$curr . "/databases/mysql/" . $database . "/" . $table . ".sql",
						$path . "/databases/mysql/" . $database . "/" . $table . ".sql"
					);

				}

				chown($path . "/databases/mysql/" . $database . "/" . $table . ".sql", $packagename);
				chgrp($path . "/databases/mysql/" . $database . "/" . $table . ".sql", $packagename);
				chmod($path . "/databases/mysql/" . $database . "/" . $table . ".sql", 0770);

			}

			if(is_dir($path . "/databases/mysql/" . $database . "/")) {
				chown($path . "/databases/mysql/" . $database . "/", $packagename);
				chgrp($path . "/databases/mysql/" . $database . "/", $packagename);
				chmod($path . "/databases/mysql/" . $database . "/", 0770);
			}
			if(is_dir($path . "/databases/mysql/")) {
				chown($path . "/databases/mysql/", $packagename);
				chgrp($path . "/databases/mysql/", $packagename);
				chmod($path . "/databases/mysql/", 0770);
			}
			if(is_dir($path . "/databases/")) {
				chown($path . "/databases/", $packagename);
				chgrp($path . "/databases/", $packagename);
				chmod($path . "/databases/", 0770);
			}
		}

		foreach ($this->api->listPostgreSQLDatabases($packagename) as $database) {
			// Find user information (for homedir)...
			if (($user = posix_getpwnam($packagename)) === false) throw new Exception(
				"Unable to get information for user '$packagename'!"
			);

			if (file_exists($user['dir'] . '/.backup-exclude-postgresql-' . $database)) continue;
			Utils::dumpPostgreSQLDatabase($database, $path . "/databases/postgresql/" . $database . ".sql");
			if (Utils::sameContent(
				$path . "/databases/postgresql/" . $database . ".sql",
				$curr . "/databases/postgresql/" . $database . ".sql"
			)) {
				unlink($path . "/databases/postgresql/" . $database . ".sql");
				link(
					$curr . "/databases/postgresql/" . $database . ".sql",
					$path . "/databases/postgresql/" . $database . ".sql"
				);
			}
		}

		if (is_link($curr)) unlink($curr);
		symlink($path, $curr);
		return $base;
	}
}