fputcsv

funkcja

Formatuje tablicę jako wiersz CSV i zapisuje go do otwartego uchwytu pliku. Zwraca długość zapisanego stringa lub false.

fputcsv(resource $stream, array $fields, string $separator = ",", string $enclosure = "\"", string $escape = "\\", string $eol = "\n"): int|false

fputcsv przyjmuje tablicę wartości, formatuje je jako jeden wiersz CSV (dodając cudzysłowy tam, gdzie to konieczne) i zapisuje do strumienia. Zwraca liczbę zapisanych bajtów lub false przy błędzie.

Jeśli któreś pole zawiera separator, znak końca linii lub znak cytowania, PHP automatycznie otoczy je znakiem $enclosure. Domyślny separator to przecinek — zmień go na średnik dla plików zgodnych z polskim Excelem. Parametr $escape warto ustawić na '' (pusty string), co wyłącza starą obsługę znaku ucieczki backslash i daje wynik zgodny z RFC 4180.

<?php
declare(strict_types=1);

$sciezka = sys_get_temp_dir() . '/eksport.csv';
$uchwyt  = fopen($sciezka, 'w');

if ($uchwyt === false) {
    throw new \RuntimeException('Nie można otworzyć pliku do zapisu.');
}

$wiersze = [
    ['Imię', 'Nazwisko', 'Miasto'],
    ['Jan', 'Kowalski', 'Warszawa'],
    ['Anna', 'Nowak', 'Kraków'],
];

foreach ($wiersze as $wiersz) {
    fputcsv($uchwyt, $wiersz, ';', '"', '');
}

fclose($uchwyt);
echo file_get_contents($sciezka);
unlink($sciezka);