Работа с файлами в PHP

от
PHP/MySQL

Работа с файлами в PHP одна из полезнейших. Для реализации простых задач не нужно использовать базы данных , это будет и быстрее и надежнее.

Основной алгоритм работы:
  - открыть файл
  - выполнить необходимые процессы
  - закрыть файл

Функция открытия файла так же может создавать новый файл.
Функция закрытия файла выполняется после завершения работ над файлом, можно не закрывать, PHP автоматом закроет, но надо стараться делать все по нормальному :)

Разберем несколько простых скриптов для примера по строкам и соберем один функциональный большой скрипт. Начну с простых примеров , чтоб понять логику работы.

Разбор функции fopen() будет рассмотрен для работы с локальными файлами, открыть можно и удаленный фаил передав в переменной имени файла Url удаленного файла.

Пример 1 - создаем пустой файл
  1. $file = 'data.txt';
  2. $fh = fopen($file, 'a');
  3. fclose($fh);

Переменная $file содержит имя файла
Переменная $fh описывает как открыть файл по ключу (ключ "а" - открыть файл для записи, если файла не существует, создает новый, указатель перемещается в конец файла)
функция fcloce() - закрывет файл (надо указать что именно закрываем ) указываем переменную открытия файла

Пример 2 - бинарно записываем строку из файла порциями
  1. $file = 'data.txt';
  2. $size = '1024';
  3. $fh=fopen($file,'r');
  4. $data='';
  5. while(!feof($fh))
  6. {
  7.   $data .= fread($fh,$size);
  8. }
  9. fclose($fh);

Переменную $file уже понятно, это имя файла.
Переменная $size - размер порции дял цикла, количество символов считываемых за один проход цикла
Переменная $fh - с ключем "r" - только чтение, читает с начала, то есть от начала до конца. выдает ошибку при отсутствии файла
Переменная $data - будущее содержимое файла, для цикла while надо определять как пустую. Цикл while в скобках условие feof($fh) - конец файла, ! - читается как "не" = цикл выполняется пока не достигнут конец файла. Заполняем переменную дата через цикл с помощью конкатенации - $data .= fread($fh,$size); , то есть за каздый проход цикла к переменной добавляется считанная строка. .= , точка означает конкатенацию.

Пример 3 - запись строки из файла
  1. $file = 'data.txt';
  2. $fh = fopen($file,'r');
  3. $contents = fgets($fh, filesize($file));
  4. fclose($fh);

Пример 4 - более короткая запись через новые функции
функция filesize() возращает размер файла в байтах, то есть количество символов
  1. $file = 'data.txt';
  2. $data = file_get_contents($file);
Выполняет все тоже самое что и пример 3

Пример 5 - запись в файл
  1. $content = 'test';
  2. $file = 'data.txt';
  3. $fh = fopen($file,'w');
  4. fwrite($fh,$content,strlen($content));
  5. fclose($fh);

Ключ "w" - фактически создает новый файл, так как если файл не существует - файл создастся, существующий файл затирается. То есть можно применить в обновлении информации в файле. Указатель, естественно, в начале файла.
Ключ "a" - если файл не существует, то создаст новый , указатель в конце файла, содержимое не затирается, можно использовать в добавлении к файлу.
Функция fwrite() - записывает переменную $content в файл $fh , длинной strlen($content).
Функция strlen() - возвращает длину строки => количество символов.

Пример 6 - новая функция записи
  1. $content = 'test';
  2. $file = 'data.txt';
  3. $write = file_put_contents($file, $content);
Добавлено в PHP 5 принцип тот же, что и в примере 5

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

Пример 7 - Получение массива из файла

  1. $file = 'data.txt';
  2. $array = file($file);  
  3. for($i=count($array);$i>0;$i--)
  4. {
  5.   echo $lines[$i];
  6. }

Считываем файл в массив, один элемент массива считается строкой до символа конца строки или перенос.
Через цикл for() перебираем содержимое массива с выводом каждого элемента массива на печать, в обратном порядке с последнего элемента массива перебираем отнимая индекс элемента пока не достигнем нулевого индекса.
Функция count() - возращает количество элементов массива.

Пример 8 - получение строки из массива
  1. $file = 'data.txt';
  2. $array = file($file);
  3. $contents = implode("|", $array);

Функция implode() собирает строку из массива добавляя разделитель, лучше всего использовать редковстречающиеся символы в качастве разделителя, или даже несколько символов.

Пример 9 - получение массива из строки
  1. $content = file_get_contents($file);
  2. $array = explode("|", $content);
Функция explode() разбивает строку на элементы через разделитель, элементы сохраняет в массив.
  • 0
  • views 4119