Verification: a143cc29221c9be0

Php array from csv file

Открытие файла

Т.к. PHP написан на языке C (читается как «Си»), в нём как и в Си, работа с файлами разделена на 3 этапа:

  1. Открытие файла
  2. Чтение/Запись
  3. Закрытие файла

В начале файл открывается в нужном режиме чтения, при этом возвращается целое число, идентификатор открытого файла или дескриптор файла. Затем выполняются команды связанные с чтением или записью в файл, при этом эти команды ориентируются уже на полученный дескриптор файла а не на его имя. После выполнения нужных команд, файл лучше всего закрыть. Конечно PHP закроет все файлы автоматически после завершения сценария, однако если ваш файл долго обрабатывается, то может происходить утечка ресурсов.


Для открытия файла в PHP используется функция fopen(), общий вид функции:


fopen( string $filename , string $mode);

Функция принимает 2 базовых параметра это

  • $filename — имя файла (путь к файлу)
  • $mode — режим чтения файла

В зависимости от режима открытия файла вы можете выполнять те или иные операции над файлом, ниже приведена таблица с описанием режимов чтения:

Режим Чтение Запись Файловый указатель Очистка файла Создать, если файла нет Ошибка, если файл есть
r Да Нет В начале Нет Нет Нет
r+ Да Да В начале Нет Нет Нет
w Нет Да В начале Да Да Нет
w+ Да Да В начале Да Да Нет
a Нет Да В конце Нет Да Нет
a+ Да Да В конце Нет Да Нет
x Нет Да В начале Нет Да Да
x+ Да Да В начале Нет Да Да
c Нет Да В начале Нет Да Нет
c+ Да Да В начале Нет Да Нет

Однако это не полный список режимов чтения файла. Дело в том, что в конце любой из строк обозначающих режим открытия файла (r, w, a и т.п.) можно добавить ещё один необязательный символ b или t .

  • b — файл открывается в режиме бинарного чтения/записи
  • t — файл открывается в режиме трансляции символа перевода строки (символы \n для UNIX или \r\n для Windows) и файл воспринимается как текстовый

Рассмотрим пару примеров:


//Открытие файла на чтение
$f = fopen('home/www/file.txt', 'rt');

//Открытие HTTP-соединения на чтение
$f = fopen('https://it-svalka.ru/', 'rt');

//Открытие FTP соединения
$f = fopen('ftp://user:password@example.com/log.txt', 'wt');

Запись и закрытие

Запись в файл осуществляется функцией fwrite() которая принимает 2 аргументам, указатель на файл и строку которую нужно записать в файл. Пример:


//Открытие тестового файла
$file = fopen('test.txt', 'wt');
//Запись строки в файл
fwrite($file, 'Текущая дата и время: ' . date('d.m.y H:i:s'));
//Закрытие файла
fclose($file);

В результате выполнения кода, будет создан файл (если его нет) test.txt и запишется строка, в моём случае:


Текущая дата и время: 10.09.20 14:35:46

Как видите после записи я вызываю функцию fclose() куда передаю дескриптор файла для его закрытия. Давайте рассмотрим несколько практических задач которые могут встретиться вам в реальных проектах.

Логирование данных

Одной из частых задач связанных с чтением/записью фалов, является логирование данных о работе веб-сайта. Логировать можно всё что угодно, ошибки, результаты запросов к БД, активность пользователей и т.п.


//Адрес файла с логами храним в константе
define('LOG_FILE', 'log.txt');

/**
 * Функция записи лога
 * @param $textToLog
 */
function logFile($textToLog){
    //Открытие файла лога
    $file = fopen(LOG_FILE, 'at');
    $sepatrator = '-----------------------------------------------';
    //Запись строки в файл
    fwrite($file, "\n" . $sepatrator . "\n". $textToLog . "\nдата и время записи: " . date('d.m.y H:i:s') . "\n");
    //Закрытие файла
    fclose($file);
}

//Вызов функции
logFile('Пользователь открыл страницу');

В результате обращения к этому скрипту, в файл log.txt попадут следующие данные:


-----------------------------------------------
Пользователь открыл страницу
дата и время записи: 10.09.20 14:52:35

-----------------------------------------------
Пользователь открыл страницу
дата и время записи: 10.09.20 14:52:37

Обратите внимание на двойные кавычки вместо одинарных. Это нужно для того, чтобы PHP корретно интерпретировал сочетание «\n» как символ переноса строки. Функцию logFile() можно улучшать до бесконечности, добавляя различные дополнительные данные из сессии пользователя, данных запроса, данных о сервере и т.п.

index.html

 

html>

head>

    title>

        How to Convert Array to

        CSV file in PHP ?

    title>

head>

body

    form action = "gfg.php" method = "post"

        Name input type = "text" name = "name" /> 

        br>br

        Email input type = "text" name = "email" /> 

        br>br>

        Phone input type = "text" name = "phone" /> 

        input type = "submit" name = "submit" value = "Submit"

    form

body>

html>