Generador de URL Corta

Crear nueva URL corta
URL Corta Generada

QR Code:

QR Code
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // Conexión a la base de datos function conectarDB() { require_once '../../includes/db.php'; try { $db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $db; } catch (Exception $e) { error_log("Error conectando a la base de datos: " . $e->getMessage()); return null; } } // Función para obtener la URL base function getBaseUrl() { $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http"; $host = $_SERVER['HTTP_HOST']; $path = dirname($_SERVER['PHP_SELF']); return $protocol . "://" . $host . $path . "/url_corta.php"; } // Si se proporciona un ID, redirigir a la URL original if (isset($_GET['id'])) { $id = $_GET['id']; // Validar que el ID sea alfanumérico if (!preg_match('/^[a-zA-Z0-9]{8}$/', $id)) { header('HTTP/1.1 400 Bad Request'); echo "ID de URL inválido"; exit; } $db = conectarDB(); if (!$db) { header('HTTP/1.1 500 Internal Server Error'); echo "Error en el servidor"; exit; } // Consultar la URL original try { $query = "SELECT url_original, count_accesos FROM urls_cortas WHERE id_corto = ?"; $stmt = $db->prepare($query); $stmt->execute([$id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) { header('HTTP/1.1 404 Not Found'); echo "URL no encontrada"; exit; } $url_original = $row['url_original']; $accesos = $row['count_accesos'] + 1; // Actualizar contador de accesos $update = "UPDATE urls_cortas SET count_accesos = ?, ultima_acceso = NOW() WHERE id_corto = ?"; $stmt = $db->prepare($update); $stmt->execute([$accesos, $id]); // Registrar el acceso $ip = $_SERVER['REMOTE_ADDR']; $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? ''; $query_log = "INSERT INTO urls_cortas_logs (id_corto, ip, user_agent, fecha_acceso) VALUES (?, ?, ?, NOW())"; $stmt = $db->prepare($query_log); $stmt->execute([$id, $ip, $user_agent]); // Redirigir a la URL original header("Location: $url_original"); exit; } catch (PDOException $e) { error_log("Error en URL corta: " . $e->getMessage()); header('HTTP/1.1 500 Internal Server Error'); echo "Error en el servidor"; exit; } } // Generar URL corta cuando se envía el formulario if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['url'])) { header('Content-Type: application/json'); $url = trim($_POST['url']); // Validar URL if (empty($url) || !filter_var($url, FILTER_VALIDATE_URL)) { echo json_encode(['success' => false, 'message' => 'URL inválida']); exit; } $db = conectarDB(); if (!$db) { echo json_encode(['success' => false, 'message' => 'Error de conexión a la base de datos']); exit; } try { // Verificar si la URL ya existe $query = "SELECT id_corto FROM urls_cortas WHERE url_original = ?"; $stmt = $db->prepare($query); $stmt->execute([$url]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if ($row) { $id_corto = $row['id_corto']; } else { // Generar un ID único de 8 caracteres $id_corto = substr(md5(uniqid(mt_rand(), true)), 0, 8); // Insertar nueva URL $insert = "INSERT INTO urls_cortas (id_corto, url_original, fecha_creacion) VALUES (?, ?, NOW())"; $stmt = $db->prepare($insert); $stmt->execute([$id_corto, $url]); } // Crear URL corta $base_url = getBaseUrl(); $url_corta = $base_url . "?id=" . $id_corto; echo json_encode([ 'success' => true, 'url_original' => $url, 'url_corta' => $url_corta, 'id' => $id_corto ]); } catch (PDOException $e) { error_log("Error al generar URL corta: " . $e->getMessage()); echo json_encode(['success' => false, 'message' => 'Error al procesar la URL']); } exit; } ?> Generador de URL Corta

Generador de URL Corta

Crear nueva URL corta
URL Corta Generada

QR Code:

QR Code