0) { $stmt = $pdo->prepare('SELECT file_name, file_mime, file_size, file_data FROM admin_task_files WHERE id = :id LIMIT 1'); $stmt->execute([':id' => $fileId]); $row = $stmt->fetch(PDO::FETCH_ASSOC); } else { $stmt = $pdo->prepare('SELECT file_name, file_mime, file_size, file_data FROM admin_tasks WHERE id = :id LIMIT 1'); $stmt->execute([':id' => $id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); } if (!$row || empty($row['file_data'])) { http_response_code(404); header('Content-Type: text/plain; charset=utf-8'); echo 'Brak pliku'; exit; } $name = (string)($row['file_name'] ?? 'plik'); $mime = (string)($row['file_mime'] ?? 'application/octet-stream'); header('Content-Type: ' . $mime); header('Content-Disposition: attachment; filename="' . str_replace('"', '', $name) . '"'); if (!empty($row['file_size'])) { header('Content-Length: ' . (string)$row['file_size']); } // PDO może zwrócić BLOB jako string echo $row['file_data']; exit; } catch (Throwable $e) { http_response_code(500); header('Content-Type: text/plain; charset=utf-8'); echo 'Błąd pobierania pliku'; exit; }