Как импортировать файлы CSV с использованием zend framework? Должен ли я использовать zend_file_transfer или есть специальный класс, который я должен изучить? Также, если я использую zend_file_transfer, есть ли какой-либо специальный валидатор для CSV?
вам не нужно использовать любые zend-библиотеки для импорта файлов csv, вы можете просто использовать собственные функции php, взгляните на fgetcsv
$row = 1; if (($handle = fopen("test.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num fields in line $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br />\n"; } } fclose($handle); }
Вы также можете использовать SplFileObject
для чтения файлов CSV.
Из руководства по php:
<?php $file = new SplFileObject("animals.csv"); $file->setFlags(SplFileObject::READ_CSV); foreach ($file as $row) { list($animal, $class, $legs) = $row; printf("A %s is a %s with %d legs\n", $animal, $class, $legs); } ?>
В настоящее время нет способа сделать это с помощью Zend Framework. Как можно быть уверенным?
Например, Zend_Translate поддерживает перевод с CSV-файлами, но если вы проверите исходный код соответствующего адаптера ( Zend_Translate_Adapter_Csv ), вы можете проверить, что он использует fgetcsv , а не определенный класс Zend. Кроме того, этот адаптер CSV поставляется со следующим предупреждением:
Примечание. Помните, что у Csv Adapter возникают проблемы, когда ваши файлы Csv кодируются иначе, чем настройки локали вашей среды. Это связано с ошибкой самого PHP, которая не будет исправлена до PHP 6.0 (http://bugs.php.net/bug.php?id=38471). Поэтому вы должны знать, что адаптер Csv из-за ограничений PHP не является локальным.
что связано с проблемами функции fgetcsv .
Вот функция, которая читает файл csv и возвращает массив элементов, которые содержат первые два значения данных столбца.
Эта функция могла бы читать файл first_name, last_name, например.
function processFile ($filename) { $rtn = array(); if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $item = array(); $item[] = $data[0]; $item[] = $data[1]; $rtn[] = $item; } } return $rtn; }