fpassthru

funkcja

Wysyła pozostałą zawartość uchwytu pliku bezpośrednio na wyjście i zwraca liczbę wysłanych bajtów.

fpassthru(resource $stream): int

fpassthru wysyła wszystkie dane od bieżącej pozycji wskaźnika do końca pliku bezpośrednio na wyjście (stdout). Zwraca liczbę wysłanych bajtów. Możesz wcześniej przesunąć wskaźnik przez fseek lub odczytać nagłówek przez fgets, a następnie przekazać resztę pliku przez fpassthru — bez buforowania całości w pamięci.

<?php
declare(strict_types=1);

$sciezka = __DIR__ . '/eksport.csv';

$uchwyt = fopen($sciezka, 'rb');

if ($uchwyt === false) {
    http_response_code(404);
    exit('Plik nie istnieje.');
}

// Pomiń pierwszą linię (nagłówek wewnętrzny)
fgets($uchwyt);

header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="eksport.csv"');

$bajty = fpassthru($uchwyt);
fclose($uchwyt);

echo PHP_EOL . "Wysłano: $bajty B";