Пятница, 19.04.2024
Меню сайта
Вход на сайт
Логин:
Пароль:
Поиск
Статистика
Рейтинг@Mail.ru Яндекс.Метрика
Реклама
HTML Perl PHP Прочее
Работа с данными CSV на PHP
CSV (Comma Separated Values - значения, разделяемые запятой) - это файловый формат, в который многие приложения могут экспортировать данные. Кажется, что с помощью explode() очень просто превратить значения CSV в массивы; однако на самом деле это очень сложно. Что будет, если запятая встретится внутри значения? В этом случае содержимое берется в двойные кавычки, и использовать explode() становится затруднительно.
Как всегда, группа разработчиков PHP выполнила всю необходимую работу и предложила функцию fgetcsv(). Она действует так же, как fgets(), но преобразует строку в массив, разделяя содержимое по запятым (или любым другим символам, указанным в третьем параметре).
Второй параметр функции fgetcsv() представляет максимальную длину строки в файле csv. В PHP 5.0.0 и более поздних версиях этот параметр необязательный, но в ранних версиях его необходимо указывать. Поэтому следует проверять длину наибольшей строки, иначе данные будут усечены.


Код
<table>  
<?php  
$fp = fopen('file.csv', 'r');  
while (!feof($fp)){  
$line = fgetcsv($handle, 4096);  
echo '<tr><td>';  
echo implode('</td><td>', htmlspecialchars ($line));  
echo '</td></tr>';  
}  
fclose($fp);  
?>  
</table>


Приведенный код, читает файл CSV и выдает его в виде таблици HTML. Для этого используется следующий взятый в цикл код:


Код
$line = fgetcsv($handle, 4096);  
echo '<tr><td>';  
echo implode('</td><td>', htmlspecialchars ($line));  
echo '</td></tr>';


Для записи файлов PHP предлагает функцию fputcsv(). Вы предоставляете указатель на файл и массив значений, а PHP делает все остальное, включая обработку специальных символов. К сожалению, в настоящее время данная функция существует только в CSV от PHP, поэтому приходится вручную импортировать нужное поведение. Кроме того, нужно позаботиться о запятых внутри элементов, поэтому все значения берутся в двойные кавычки. Если элемент содержит двойные кавычки, их нужно представить как специальный символ. В данном случае это выполняется не через добавление обратной косой черты, а путем удвоения кавычек. Ниже приводится пример приемлемой строки данных CSV:


Код
Quote, "And she said: ""No."" ...", Unknown


Код функции fputcsv() записывается следующим образом:


Код
if (!function_exists('fputcsv')) {  
function fputcsv($fp, $line, $separator = ',') {  
for ($i=0; $i < count($line); $i++) {  
if (false !== strpos($line[$i], '"')) {  
$line[$i] = ereg_replace('"', '""', $line[$i]);  
}  
if (false !== strpos($line[$i], $separator) || false !== strpos($line[$i], '"')) {  
$line[$i] = '"' . $line[$i] . '"';  
}  
}  
fwrite($fp, implode($separator, $line) . "\r\n");  
}  
}
PHP 8645 04.01.2010
Материалы по теме: