Источник http://blog.ox2.ru/php/rabota-s-csv-php/

Обычно если стоимость создания интернет магазина достаточно высока, заказчики просят сделать импорт товаров из их прайс листов. Им необходимо чтобы была возможность не только добавлять новый товар на сайт, но и обновлять цены и количество на складе уже существующих товаров.

PHP как известно не умеет работать excel-файлами стандартными средствами. Конечно есть множество различных классов, которые могут читать и записывать информацию в excel, но с ними возникает достаточно много проблем (об этом мы напишем в следующих статьях).

Куда проще и удобней работать с csv-файлами.

Для примера сделаем небольшую программку. Она будет обрабатывать csv-файл сотрудников компании OX2.ru.

Создадим новую таблицу в Excel, содержащую следующие поля:

Чтение и запись в CSV на PHP

Сохраним таблицу как csv-файл, с разделителем поля «;».

У нас должен получиться такой файл:

"Иванов А.А.";"Программист компании OX2.ru";89255552332
"Сидоров А.Е.";"Дизайне компании OX2.ru";89161231212
"Пирожков А.Б.";"Арт-директор OX2.ru";84951232121
"Кулибин Б.А.";"Менеджер OX2.ru";89031233333

Ниже приведен исходный код с подробным описанием.

Код слелан на ООП с использованием классов, и при небольшой доработки может многократно использоваться в различных приложениях. Если вы не привыкли к программированию на классах, а используете функции или еще что-то, то настоятельно рекомендуем переучиваться ))

Так же в коде используется генерация исключений (Exception), о них читайте в следующих наших статьях.

<!--?php /**  * Класс для работы с csv-файлами   * @author дизайн студия ox2.ru    */ class CSV {     private $_csv_file = null;     /**      * @param string $csv_file  - путь до csv-файла      */     public function __construct($csv_file) {         if (file_exists($csv_file)) { //Если файл существует             $this--->_csv_file = $csv_file; //Записываем путь к файлу в переменную
        }
        else { //Если файл не найден то вызываем исключение
            throw new Exception("Файл "$csv_file" не найден");
        }
    }

    public function setCSV(Array $csv) {
        //Открываем csv для до-записи,
        //если указать w, то  ифнормация которая была в csv будет затерта
        $handle = fopen($this->_csv_file, "a");

        foreach ($csv as $value) { //Проходим массив
            //Записываем, 3-ий параметр - разделитель поля
            fputcsv($handle, explode(";", $value), ";");
        }
        fclose($handle); //Закрываем
    }

    /**
     * Метод для чтения из csv-файла. Возвращает массив с данными из csv
     * @return array;
     */
    public function getCSV() {
        $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения

        $array_line_full = array(); //Массив будет хранить данные из csv
        //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля
        while (($line = fgetcsv($handle, 0, ";")) !== FALSE) {
            $array_line_full[] = $line; //Записываем строчки в массив
        }
        fclose($handle); //Закрываем файл
        return $array_line_full; //Возвращаем прочтенные данные
    }

}

try {
    $csv = new CSV("ox2.csv"); //Открываем наш csv
    /**
     * Чтение из CSV  (и вывод на экран в красивом виде)
     */
    echo "</pre>
<h2>CSV до записи:</h2>
<pre>
";
    $get_csv = $csv->getCSV();
    foreach ($get_csv as $value) { //Проходим по строкам
        echo "Имя: " . $value[0] . "
";
        echo "Должность: " . $value[1] . "
";
        echo "Телефон: " . $value[2] . "
";
        echo "--------
";
    }

    /**
     * Запись новой информации в CSV
     */
    $arr = array("Антонов Б.А.;Админ OX2.ru;89031233333",
        "Колобков В.Б.;Босс OX2.ru;89162233333");
    $csv->setCSV($arr);
}
catch (Exception $e) { //Если csv файл не существует, выводим сообщение
    echo "Ошибка: " . $e->getMessage();
}
?>

 

Основную работу с CSV файлами на себя берет класс CSV , Он имеет следующие методы:

setCSV(Array $csv) — записывает данные в csv-файл. Данные должны быть переданы массивом. Метод может дозаписывать csv файл, и создавать новый (читайте в описании).

Метод getCSV читает данные из csv файла, и возвращает двумерный массив следующего вида:

Array
(
    [0] => Array
        (
            [0] => Иванов А.А.
            [1] => Программист компании OX2.ru
            [2] => 89255552332
        )

    [1] => Array
        (
            [0] => Сидоров А.Е.
            [1] => Дизайне компании OX2.ru
            [2] => 89161231212
        )

    [2] => Array
        (
            [0] => Пирожков А.Б.
            [1] => Арт-директор OX2.ru
            [2] => 84951232121
        )

    [3] => Array
        (
            [0] => Кулибин Б.А.
            [1] => Менеджер OX2.ru
            [2] => 89031233333
        )

)

Пример достаточно простой, несмотря на то что получилось достаточно много кода.

Скачать исходник

И дальше с помощью цикла foreach обходим массив, и выводим в красивом виде содержимое csv файла.

Импорт данных из csv файлов будет полезен не только для обновление товаров в интернет-магазинах, но и для подгрузки/обновлении какой-либо информации на обычный сайт.