Основные моменты статьи:
Часто в работе проекта необходимо использовать экспорт и импорт данных. Существует множество способов импортировать и экспортировать данные. Рассмотрим пример импорт/экспорта данных с помощью CSV файлов.
Для начала давайте разберемся что же такое CSV файл. CSV - текстовый формат, предназначенный для представления табличных данных. Одна строка файла - это одна строка в таблице. Значение колонок в файле разделяется специальным символом (разделителем). Обычно в качестве разделителя выступает запятая (,) или точка с запятой (;). Для использования зарезервированных значений (двойная кавычка, запятая, точка с запятой, новая строка) в строке их необходимо заключить в двойные кавычки(").
Название товара;Артикль;Цена;Описание;Количество;Производитель Windows 10;00001;2000;Microsoft Windows - семейство проприетарных операционных систем корпорации Microsoft;20;Microsoft USB Flash Drive;20021;500;Запоминающее устройство нового поколения;100;Samsung Dell x-01;200232;1000;Ноутбук dell;10;Dell Dell od-1;3449;700;Монитор dell;15;Dell Asus x50m;4290;500;Ноутбук Asus;3;Asus
Для импорта из CSV необходимо всего пару строк кода и стандартная php функция fgetcsv. Пример:
<?php
//...
$r = 0;
// $pathTofile - путь к файлу и его имя, 1000 - длина, ; - разделитель
while (($row = fgetcsv($pathTofile, 1000, ";")) != FALSE){
$r++;
//if($r == 1) {continue;} // Не импортируем первую строку (например, если там заголовки)
//записываем данные в БД
$ins="INSERT INTO `table_to_import` (`name`, `cost`, `count`) VALUES ('$row[0]', '$row[2]', '$row[4]')";
mysql_query($ins);
}
fclose($file);
//...
fgetcsv() - читает строку из файла и производит разбор данных CSV. Подробнее об fgetcsv() можно посмотреть здесь: http://php.net/manual/ru/function.fgetcsv.php.
Подробный пример импорта с использованием Yii Framework:
<?php
class ImportController extends Controller {
//...
/**
* Импорт товаров из csv файла
*/
public function actionImportCSV() {
//путь к файлу
$this->pathToFile = Yii::getPathOfAlias('webroot') . '/path/to/file.csv';
//файл можно загрузить с помощью формы
if (!file_exists($this->pathToFile) || !is_readable($this->pathToFile)) {
//... код, если файл отсутствует
}
$data = array();
if (($handle = fopen($this->pathToFile, 'r')) !== false) {
$i = 0;
while (($row = fgetcsv($handle, 1000, $this->delimiter)) !== false) {
$model = new Goods();
$model->name = $row[0];
$model->article = $row[1];
$model->cost = $row[2];
$model->description = $row[3];
$model->count = $row[4];
$model->producer = $row[5];
if ($model->validate()) {
$model->save();
} else {
//... код в случае ошибки сохранения
}
}
fclose($handle);
}
//... код после импорта
}
//... код
}
Экспорт из БД (или любого другого источника) еще проще. Пример экспорта в CSV:
<?php
class ExportController extends Controller {
//...
/**
* Экспорт товаров в csv файла
*/
public function actionExportCSV() {
$data = "Название товара;Артикль;Цена;Описание;Количество;Производитель\r\n";
$model = Goods::model()->findAll();
foreach ($model as $value) {
$data .= $value->name.
';' . $value->article .
';' . $value->cost .
';' . $value->description .
';' . $value->count .
';' . $value->producer .
"\r\n";
}
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="export_' . date('d.m.Y') . '.csv"');
//echo iconv('utf-8', 'windows-1251', $data); //Если вдруг в Windows будут кракозябры
Yii::app()->end();
}
//... код
}
Вот и все, удачного импорта/экспорта данных с использованием формата CSV.
devreadwrite.com


Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
Не очень удачно логику пихать в контроллер! Полное нарушение MVC
Ответить