Tuesday, August 20, 2024
PHP: Why fgetcsv() and not file()
When handling CSV files in PHP, you have multiple options for reading the data, with fgetcsv() and the file() function being two common approaches. Each method has its advantages and disadvantages, depending on what you need to do with the CSV data. Let’s compare these two methods:
1. Using fgetcsv()
Advantages:
- Built for CSVs: fgetcsv() is specifically designed to read CSV files. It automatically handles CSV formatting, including encapsulated fields with commas, quotes, and escaped characters.
- Memory Efficiency: It reads one line at a time, which is memory efficient, especially useful for large files.
- Convenient Parsing: Automatically parses the line into an array based on the delimiter, which is very handy for direct data manipulation.
Disadvantages:
- Limited to CSV Format: Only useful for CSV files and cannot be easily used for other file formats.
- Less Flexible: You’re mostly stuck with the structure of how fgetcsv() parses each line (though you can specify custom delimiters, escape characters, and enclosures).
Example Usage of fgetcsv():
$handle = fopen('path/to/file.csv', 'r'); while (($data = fgetcsv($handle, 1000, ",")) !== false) { print_r($data); } fclose($handle);
2. Using file()
Advantages:
- Simplicity: file() reads the entire file into an array, where each line is an element of the array, simplifying the process of file reading.
- Flexible Post-Processing: Useful if you need to process each line as a whole string or perform non-CSV specific parsing.
- Convenient for Smaller Files: Quickly reads smaller files into memory, making it easier to manipulate content that isn’t strictly structured as CSV.
Disadvantages:
- Memory Usage: Since it reads the entire file into memory at once, it can be inefficient or impractical for very large files.
- Manual Parsing Required: Does not handle CSV complexity such as commas in fields, quoted fields, etc., without additional parsing logic.
Example Usage of file():
$lines = file('path/to/file.csv'); foreach ($lines as $line) { $data = str_getcsv($line); // Convert line to array similar to fgetcsv print_r($data); }
Decision Factors:
- File Size: Use fgetcsv() for large files to keep memory usage down. Use file() for smaller files where quick access to all lines is more convenient.
- Complexity of CSV: If the CSV data includes lots of special cases (like fields containing commas, quotes, or newlines), fgetcsv() handles these natively. If your data is simpler or requires custom processing, file() might be sufficient with manual parsing.
- Processing Needs: If you need to process or analyze each line of text beyond simple CSV parsing (like complex checks or multiple parsing passes), file() can be advantageous.
Friday, April 12, 2024
12 апреля 2024, день космонавтики и больших надежд
Для тех кто читает этот пост не 12 апреля 2024 контекст: в результате известных событий 7 октября 2023г, после 6 месяцев войны, Израиль решил разбомбить посольство Ирана на территории Сирии. В результате уже неделю вся страна сидит на измене и ждёт когда Иран долбанёт в ответ.
Израильская пресса, а точнее портал УайНет (бывший Ядийот Ахаронот), пытаясь успокоить население, запостил картинку следующего содержания: Небо закрыто! Четыре уровня защиты!
Небо закрыто! Четыре уровня защиты![/img]
В связи с этим, рассказ…
Как то раз наш “полк” ПВО решил провести учения. Собрали всех болезных, отобрали у них “освобождения от физкультуры”, погрузили в грузовики и отправили туда куда хуситы не стреляли, то есть туда где написано “конец света” и оттуда еще 15км налево.
По прибытии развернули они там свои замечательные американские вооружения, которые уже тогда пора было отправить во Вьетнам на выставку “С помощью этого и СССР мы победили США 25 лет назад”. Натянули тент, достали пиво и сели ждать когда радар подаст звуковой сигнал об обнаружении учебной цели.
Сигнал не заставил себя ждать! Только исходил он не от радарной установки, а от телефона на координционном пункте, за 70км от пусковой установки. Уже тогда у нас знали что такое работа на удалёнке. Формат сигнала был такой: звонок-звонок-рядовой Рабинович слухаэ!
Как вы наверное догадались (знаю что нет) звонил командующий ПВО и спрашивал, удалось ли нам засечь цель и провести “пуск”, потому что пилот учебной цели уже пообедал, допил компот и хочет ехать домой к маме.
В общем пилот нарезал еще 3 круга и к домой не поехал, потому как Шабат и автобусов больше нет.