Total Sites
Storage Used
No Projects Yet
Upload your first HTML/ZIP file to see it here.
$site_password, 'created' => time(), 'filename' => $file_name, 'original_name' => $custom_url ]; file_put_contents($meta_path, json_encode($metadata)); $website_url = getWebsiteUrl($custom_url, $user_id); $_SESSION['success'] = "File uploaded successfully!"; $_SESSION['file_url'] = $website_url; $_SESSION['file_name'] = $file_name; } else { $_SESSION['error'] = "Error uploading file. Check folder permissions."; } } } } else { $_SESSION['error'] = "Only HTML, CSS, JavaScript, and ZIP files are allowed."; } } else { $_SESSION['error'] = "File upload error. Please try again. Error code: " . $file['error']; } } // Code editor upload elseif (isset($_POST['html_code'])) { $html_code = $_POST['html_code']; $custom_url = trim($_POST['code_custom_url']) ?: generateCustomUrl('my-website'); $site_password = trim($_POST['code_site_password']) ?: ''; if (!empty($html_code)) { if (!is_dir($user_dir)) { mkdir($user_dir, 0777, true); } $custom_url = cleanCustomUrl($custom_url); $file_path = $user_dir . '/' . $custom_url . '.html'; $meta_path = $user_dir . '/' . $custom_url . '.json'; // Check if URL already exists if (file_exists($file_path)) { $_SESSION['error'] = "This URL is already taken. Please choose a different one."; } else { if (file_put_contents($file_path, $html_code)) { // Save metadata $metadata = [ 'password' => $site_password, 'created' => time(), 'filename' => $custom_url . '.html', 'original_name' => $custom_url ]; file_put_contents($meta_path, json_encode($metadata)); $website_url = getWebsiteUrl($custom_url, $user_id); $_SESSION['success'] = "Website created successfully!"; $_SESSION['file_url'] = $website_url; $_SESSION['file_name'] = $custom_url . '.html'; } else { $_SESSION['error'] = "Error creating file. Check folder permissions."; } } } else { $_SESSION['error'] = "Please enter HTML code."; } } // Handle site deletion elseif (isset($_POST['delete_site'])) { $site_to_delete = $_POST['delete_site']; deleteSite($site_to_delete, $user_id); $_SESSION['success'] = "Site deleted successfully!"; } // Handle site renaming elseif (isset($_POST['rename_site'])) { $old_name = $_POST['old_name']; $new_name = cleanCustomUrl($_POST['new_name']); if (renameSite($old_name, $new_name, $user_id)) { $_SESSION['success'] = "Site renamed successfully!"; } else { $_SESSION['error'] = "Error renaming site. Name might be taken."; } } // Handle password update elseif (isset($_POST['update_password'])) { $site_name = $_POST['site_name']; $new_password = $_POST['new_password']; if (updateSitePassword($site_name, $new_password, $user_id)) { $_SESSION['success'] = "Password updated successfully!"; } else { $_SESSION['error'] = "Error updating password."; } } header("Location: index.php"); exit; } // Handle ZIP file upload and extraction function handleZipUpload($zip_tmp, $custom_url, $user_id, $password) { if (!class_exists('ZipArchive')) { return ['success' => false, 'message' => 'ZIP extraction not supported on this server.']; } $zip = new ZipArchive(); $result = ['success' => false, 'message' => '']; if ($zip->open($zip_tmp) === TRUE) { $extract_path = 'sites/' . $user_id . '/' . $custom_url; // Create directory for extracted files if (!is_dir($extract_path)) { mkdir($extract_path, 0777, true); } $allowed_extensions = ['html', 'htm', 'css', 'js', 'txt']; $has_html = false; $extracted_files = []; // Extract allowed files only for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); $file_ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); // Skip directories and non-allowed files if (substr($filename, -1) === '/' || !in_array($file_ext, $allowed_extensions)) { continue; } // Extract file $file_content = $zip->getFromIndex($i); $safe_filename = basename($filename); if ($file_content !== false) { file_put_contents($extract_path . '/' . $safe_filename, $file_content); $extracted_files[] = $safe_filename; if ($file_ext === 'html' || $file_ext === 'htm') { $has_html = true; } } } $zip->close(); if ($has_html) { // Save metadata for ZIP site $meta_path = 'sites/' . $user_id . '/' . $custom_url . '.json'; $metadata = [ 'password' => $password, 'created' => time(), 'filename' => $custom_url, 'original_name' => $custom_url, 'is_zip' => true, 'files' => $extracted_files ]; file_put_contents($meta_path, json_encode($metadata)); $result['success'] = true; $result['message'] = count($extracted_files) . " files extracted successfully."; } else { // Clean up if no HTML file found array_map('unlink', glob("$extract_path/*")); rmdir($extract_path); $result['message'] = "ZIP file must contain at least one HTML file."; } } else { $result['message'] = "Failed to open ZIP file."; } return $result; } // Generate custom URL from filename function generateCustomUrl($filename) { $name = pathinfo($filename, PATHINFO_FILENAME); $name = preg_replace('/[^a-z0-9]/', '-', strtolower($name)); $name = preg_replace('/-+/', '-', $name); $name = trim($name, '-'); return $name ?: 'my-site'; } // Clean custom URL function cleanCustomUrl($url) { $url = preg_replace('/[^a-z0-9-]/', '', strtolower($url)); $url = preg_replace('/-+/', '-', $url); $url = trim($url, '-'); return $url ?: 'my-site'; } // Get website full URL function getWebsiteUrl($path, $user_id) { $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http'; $host = $_SERVER['HTTP_HOST']; $base_url = $protocol . '://' . $host . dirname($_SERVER['PHP_SELF']); return rtrim($base_url, '/') . '/view.php?site=' . $path . '&user=' . $user_id; } // Delete site function deleteSite($site_name, $user_id) { $base_path = 'sites/' . $user_id . '/'; // Check if it's a ZIP site (directory) $dir_path = $base_path . $site_name; if (is_dir($dir_path)) { // Delete all files in directory array_map('unlink', glob("$dir_path/*.*")); rmdir($dir_path); // Delete metadata $meta_file = $base_path . $site_name . '.json'; if (file_exists($meta_file)) { unlink($meta_file); } } else { // Delete single file with all extensions $extensions = ['html', 'htm', 'css', 'js', 'json']; foreach ($extensions as $ext) { $file_path = $base_path . $site_name . '.' . $ext; if (file_exists($file_path)) { unlink($file_path); } } } return true; } // Rename site function renameSite($old_name, $new_name, $user_id) { $base_path = 'sites/' . $user_id . '/'; // Check if new name already exists $new_meta = $base_path . $new_name . '.json'; if (file_exists($new_meta)) { return false; } // Check if it's a ZIP site $old_dir = $base_path . $old_name; if (is_dir($old_dir)) { $new_dir = $base_path . $new_name; if (!rename($old_dir, $new_dir)) { return false; } // Rename metadata file $old_meta = $base_path . $old_name . '.json'; if (file_exists($old_meta)) { rename($old_meta, $new_meta); // Update metadata $metadata = json_decode(file_get_contents($new_meta), true); $metadata['filename'] = $new_name; $metadata['original_name'] = $new_name; file_put_contents($new_meta, json_encode($metadata)); } } else { // Rename single file $extensions = ['html', 'htm', 'css', 'js']; $renamed = false; foreach ($extensions as $ext) { $old_file = $base_path . $old_name . '.' . $ext; if (file_exists($old_file)) { $new_file = $base_path . $new_name . '.' . $ext; if (!rename($old_file, $new_file)) { return false; } $renamed = true; break; } } if ($renamed) { // Rename metadata $old_meta = $base_path . $old_name . '.json'; $new_meta = $base_path . $new_name . '.json'; if (file_exists($old_meta)) { rename($old_meta, $new_meta); // Update metadata $metadata = json_decode(file_get_contents($new_meta), true); $metadata['filename'] = $new_name . '.' . pathinfo($new_file, PATHINFO_EXTENSION); $metadata['original_name'] = $new_name; file_put_contents($new_meta, json_encode($metadata)); } } } return true; } // Update site password function updateSitePassword($site_name, $new_password, $user_id) { $meta_path = 'sites/' . $user_id . '/' . $site_name . '.json'; if (file_exists($meta_path)) { $metadata = json_decode(file_get_contents($meta_path), true); $metadata['password'] = $new_password; file_put_contents($meta_path, json_encode($metadata)); return true; } return false; } // Get list of uploaded sites for current user $uploaded_sites = []; $total_size = 0; if (is_dir($user_dir)) { $files = scandir($user_dir); foreach ($files as $file) { if ($file !== '.' && $file !== '..' && !str_ends_with($file, '.json')) { $file_path = $user_dir . '/' . $file; if (is_dir($file_path)) { // Handle directory (ZIP extracted sites) $html_files = glob($file_path . '/*.{html,htm}', GLOB_BRACE); if (!empty($html_files)) { $site_name = $file; $meta_path = $user_dir . '/' . $site_name . '.json'; $metadata = file_exists($meta_path) ? json_decode(file_get_contents($meta_path), true) : []; $uploaded_sites[] = [ 'name' => $site_name, 'filename' => $file, 'url' => getWebsiteUrl($site_name, $user_id), 'time' => filemtime($file_path), 'size' => getDirectorySize($file_path), 'type' => 'zip', 'is_dir' => true, 'has_password' => !empty($metadata['password']), 'metadata' => $metadata ]; $total_size += getDirectorySize($file_path); } } else { // Handle single files $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); // Only show allowed file types if (in_array($file_ext, ['html', 'htm', 'css', 'js'])) { $site_name = pathinfo($file, PATHINFO_FILENAME); $meta_path = $user_dir . '/' . $site_name . '.json'; $metadata = file_exists($meta_path) ? json_decode(file_get_contents($meta_path), true) : []; $uploaded_sites[] = [ 'name' => $site_name, 'filename' => $file, 'url' => getWebsiteUrl($site_name, $user_id), 'time' => filemtime($file_path), 'size' => filesize($file_path), 'type' => $file_ext, 'is_dir' => false, 'has_password' => !empty($metadata['password']), 'metadata' => $metadata ]; $total_size += filesize($file_path); } } } } // Sort by newest first usort($uploaded_sites, function($a, $b) { return $b['time'] - $a['time']; }); } // Get directory size recursively function getDirectorySize($path) { $total_size = 0; $files = scandir($path); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { $file_path = $path . '/' . $file; if (is_file($file_path)) { $total_size += filesize($file_path); } elseif (is_dir($file_path)) { $total_size += getDirectorySize($file_path); } } } return $total_size; } // Convert bytes to human readable format function formatSize($bytes) { if ($bytes == 0) return '0 B'; $units = ['B', 'KB', 'MB', 'GB']; $bytes = max($bytes, 0); $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); $pow = min($pow, count($units) - 1); $bytes /= pow(1024, $pow); return round($bytes, 2) . ' ' . $units[$pow]; } ?>
PREMIUM FREE SYSTEM
Total Sites
Storage Used
Upload your first HTML/ZIP file to see it here.