2012-07-09 11 views
27

Jeśli mam plik CSV zapisany na serwerze, jak mogę użyć PHP do napisania danej linii, na przykład 142,fred,elephants?Dodaj nową linię do pliku CSV

+1

To się nazywa * dołączanie * patrz tryb, gdy użytkownik otworzy plik istnieje często jest otwarty na dołączanie funkcji systemu plików. – hakre

Odpowiedz

68

Otwórz plik CSV do dopisywania (fopen­Docs):

$handle = fopen("test.csv", "a"); 

Następnie dodać linię (fputcsv­Docs):

fputcsv($handle, $line); # $line is an array of string values here 

następnie zamknij uchwyt (fclose­Docs):

fclose($handle); 

Mam nadzieję, że to będzie pomocne.

+3

@fvu: Niezupełnie. '+' Nie jest konieczne, samo 'a' tworzy plik, jeśli nie istnieje. '+' Służy do czytania wsparcia. Zobacz * "'a' \t Otwórz tylko do zapisu, umieść wskaźnik pliku na końcu pliku .Jeśli plik nie istnieje, spróbuj go utworzyć." * Http://de.php.net/manual/en /function.fopen.php – hakre

+4

@Dale: To nie było tak. Dodano bardziej trywialne zdanie końcowe, które nie może być odczytane zbyt źle, że łatwo. Nie urazić tutaj żadnych uczuć. – hakre

+0

Pomogłoby, gdybyś zawarł, że '$ line' musi być tablicą łańcuchów, a nie samą linią. – Overcode

0

Jeśli chcesz każdy plik podziału, aby zachować nagłówki oryginału; jest to zmodyfikowana wersja odpowiedzi hakre za:

$inputFile = './users.csv'; // the source file to split 
$outputFile = 'users_split'; // this will be appended with a number and .csv e.g. users_split1.csv 

$splitSize = 10; // how many rows per split file you want 

$in = fopen($inputFile, 'r'); 
$headers = fgets($in); // get the headers of the original file for insert into split files 
// No need to touch below this line.. 
    $rowCount = 0; 
    $fileCount = 1; 
    while (!feof($in)) { 
     if (($rowCount % $splitSize) == 0) { 
      if ($rowCount > 0) { 
       fclose($out); 
      } 
      $out = fopen($outputFile . $fileCount++ . '.csv', 'w'); 
      fputcsv($out, explode(',', $headers)); 
     } 
     $data = fgetcsv($in); 
     if ($data) 
      fputcsv($out, $data); 
     $rowCount++; 
    } 

    fclose($out); 
Powiązane problemy