composer require rollun-com/rollun-files
Представляє собою бібліотеку для розширеного управління файловою системою, з особливим акцентом на роботу з CSV‑файлами. Його функціональність включає:
- FileManager:
Надає методи для створення директорій, рекурсивного видалення файлів та папок, а також для безпечного відкриття, блокування та закриття файлів. Реалізована логіка повторних спроб при доступі до файлів, що забезпечує коректну поведінку в умовах конкурентного доступу.
- FileObject:
Наслідує стандартнийSplFileObject
, доповнюючи його методами для точкової модифікації файлу — вставки, видалення та перезапису окремих рядків, підрахунку рядків, зміни розміру файлу з урахуванням буферизації та перевірки коректності операцій запису/читання.
-
CsvFileObject:
Забезпечує зручне читання та запис CSV‑даних, автоматичне визначення заголовків, ітерацію по рядках та коректну обробку спеціальних символів (наприклад, нормалізацію символів переведення рядка). -
CsvFileObjectWithPrKey:
Розширює можливості роботи з CSV, передбачаючи наявність первинного ключа (зазвичай у першому стовпці). Дозволяє виконувати пошук, додавання та оновлення рядків за значенням цього ключа.
- Патерн «Стратегія»:
ІнтерфейсCsvStrategyInterface
та його реалізація, наприклад,CsvBinaryStrategy
, реалізують механізм швидкого доступу до рядків CSV‑файлу (на основі бінарного пошуку) за умови, що файл відсортовано за первинним ключем. Це дозволяє ефективно знаходити, вставляти та оновлювати записи.
Таким чином, бібліотека об’єднує функціонал для надійного та ефективного управління звичайними файлами, а також для детальної роботи з CSV‑даними. Він підходить для сценаріїв, де потрібні не лише операції читання/запису файлів, а й складне редагування їх вмісту з забезпеченням безпеки та конкурентного доступу.
use rollun\files\Csv\CsvFileObjectWithPrKey;
$filename = 'data.csv';
/*
* id,name,age
* 123,Ivan,25
*/
$csv = new CsvFileObjectWithPrKey(
$filename,
',',
'"',
'\\',
CsvBinaryStrategy::class,
'id'
);
$row = $csv->getRowById("123"); // 123,Ivan,25
$newRow = [
"id" => "456",
"name" => "John Doe",
"age" => "30",
];
$csv->addRow($newRow); // add row to csv
/*
* id,name,age
* 123,Ivan,25
* 456,John Doe,30
*/
$updatedRow = [
"id" => "456",
"name" => "John Smith",
"age" => "31",
];
$csv->setRow($updatedRow); // update row with id 456
/*
* id,name,age
* 123,Ivan,25
* 456,John Smith,31
*/