Skip to content

Instantly share code, notes, and snippets.

@Kirill-Gorelov
Last active March 30, 2021 07:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save Kirill-Gorelov/b16d7be419d4460e32d5d1d037c98f7e to your computer and use it in GitHub Desktop.
Save Kirill-Gorelov/b16d7be419d4460e32d5d1d037c98f7e to your computer and use it in GitHub Desktop.
<?php
/**************
класс чтения и записе csv файла
***************/
/**********************
Иногда при просмотре csv файла в эксель, выходит странная кодровка. Дело не в самой кодировки файла, а в отсутствие одной опции.
fprintf ( $ fp , chr ( 0xEF ). chr ( 0xBB ). chr ( 0xBF ));
В общем виде выглядит это так
$fp = fopen("путь", 'r+');
fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($fp, );
***********************/
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) {
$handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то ифномация которая была в csv будет затерта
foreach ($csv as $value) { //Проходим массив
fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля
}
fclose($handle); //Закрываем
}
/**
* Метод для чтения из csv-файла. Возвращает массив с данными из csv
* @return array;
*/
public function getCSV() {
$handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения
$array_line_full = array(); //Массив будет хранить данные из csv
while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля
$array_line_full[] = $line; //Записываем строчки в массив
}
fclose($handle); //Закрываем файл
return $array_line_full; //Возвращаем прочтенные данные
}
}
/*********
функция записи масива в csv файл
*********/
function arrtocsv($name, $array)
{
if(file_exists($name.".csv")){
// file_put_contents($name.".csv", '');
echo "записываю";
}
else{
file_put_contents($name.".csv", '');
}
try {
$csv = new CSV($name.".csv"); //Открываем наш csv
$csv->setCSV($array); // записываем
}
catch (Exception $e) { //Если csv файл не существует, выводим сообщение
echo "Ошибка: " . $e->getMessage();
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment