fetch( "SELECT fr.*, u.name as user_name FROM file_requests fr LEFT JOIN users u ON fr.user_id = u.id WHERE fr.token = ?", [$token] ); } catch (Exception $e) { http_response_code(500); showErrorPage('Error del sistema', 'No se pudo verificar el enlace. Intenta de nuevo más tarde.'); exit; } if (!$request) { http_response_code(404); showErrorPage('Enlace no encontrado', 'Este enlace de carga no existe o ya fue eliminado.'); exit; } // Verificar expiración if (strtotime($request['expires_at']) < time()) { http_response_code(410); showErrorPage('Enlace expirado', 'Este enlace de carga ha expirado. Solicita uno nuevo al asesor.'); exit; } // Verificar estado if ($request['status'] === 'cancelled') { http_response_code(410); showErrorPage('Enlace cancelado', 'Esta solicitud fue cancelada. Contacta a tu asesor.'); exit; } // Verificar archivos ya subidos $uploadedFiles = []; try { $uploadedFiles = $db->fetchAll( "SELECT * FROM file_request_uploads WHERE request_id = ? ORDER BY created_at DESC", [$request['id']] ); } catch (Exception $e) { // No crítico } $alreadyUploaded = ($request['status'] === 'uploaded' && count($uploadedFiles) > 0); // Calcular tamaño máximo legible $maxSizeMB = round($request['max_file_size'] / (1024 * 1024)); $allowedTypes = explode(',', $request['allowed_types']); // Auto-detectar APP_URL $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $appUrl = $protocol . '://' . $_SERVER['HTTP_HOST']; function showErrorPage($title, $message) { ?>
= htmlspecialchars($message) ?>
Envía archivos de hasta = $maxSizeMB ?> MB de forma segura
Tus archivos fueron enviados correctamente. El asesor los recibirá en breve.