Дописывать строки в файл CSV php

471
25 января 2017, 01:08

Этот код почему-то удаляет все данные из файла и записывает новые при каждом вызове saveRow().

$list - одномерный массив...

function saveRow($list) {
    $base = 'base.csv';
    if (is_writable($base)) {
        if (!$handle = fopen($base, 'a')) {
            $list = array_map("utf8_decode", $list);
            fputcsv($handle, $list);
            fclose($handle);
        }
    }
}

Как дописывать строки в csv файл?

Answer 1

Нужно вынести fopen и fclose за пределы цикла, вызывающего эту функцию.

UPDATE

Согласно документации, "Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и все еще не закрытым функцией fclose())."

По всей видимости, ваш код выглядит примерно так:

function saveRow($list) {
    $base = 'base.csv';
    if (is_writable($base)) {
        if (!$handle = fopen($base, 'a')) {
            $list = array_map("utf8_decode", $list);
            fputcsv($handle, $list);
            fclose($handle);
        }
    }
}
funcion xxx() {
    foreach () {
    //...
        saveRow($list);
    // ...
}

Надо сделать так

function saveRow($list, $handle) {
            $list = array_map("utf8_decode", $list);
            fputcsv($handle, $list);
}
funcion xxx() {
    $base = 'base.csv';
    if (is_writable($base)) {
        if (!$handle = fopen($base, 'a')) {
            foreach () {
            //...
                saveRow($list, $handle);
            // ...
        }
        fclose($handle);
    }
}

Обратите внимание на изменения в функции saveRow.

Answer 2

Вот рабочий код, надо ему посылать массив

function saveRow($list) {
  $file = fopen("base.csv","a");
  foreach ($list as $line)
  {
    fputcsv($file,explode(',',$line));
  }
  fclose($file); 
}
saveRow(Array("test,test"));
READ ALSO
Асоц массивы php

Асоц массивы php

Как через foreach вывести элементы массива ?

331
Можно ли узнать статус пользователя в whatsApp?

Можно ли узнать статус пользователя в whatsApp?

Можно ли через API по номеру человека узнать, в онлайне он сейчас или нет?

309
как ответить клиенту в формате xml в php?

как ответить клиенту в формате xml в php?

пожалуйста помогите как ответить клиенту на его запрос в формате xml без echo чтобы он получал ответ и читал через SimpleXMLElement

314