Работа с файлами в PHP часть 1 (file_get_contents, file_put_contents, file_exists, unlink, rename, copy, filesize)

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

Чтение файла

Функция file_get_contents читает содержимое файла в строку. Можно прочитать как содержимое файла на сайте со скриптом, так и содержимое на удалённом сервере. Рассмотрим вариант с чтением локально расположенного файла:
<?php 
   echo file_get_contents('mouse.txt');
?>
При выполнении этого кода на экран будет выведено содержание файла 'mouse.txt', который находится в той же папке, что и скрипт с кодом примера. Если необходимо указать файл в другом расположении, то нужно использовать полный путь к файлу в системе.
Если с полным путём возникнут проблемы, то можно воспользоваться адресом корневой папки сайта, который находится в переменной $_SERVER['DOCUMENT_ROOT'].

Тогда путь к файлу можно прописать как:
$_SERVER['DOCUMENT_ROOT'] . '/mouse.txt'

Запись файла

С помощью функции file_put_contents можно записывать данные в файл. Приведём пример её использования:
<?php 
   $file = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   $content = 'Тише, мыши, кот на крыше';
   file_put_contents($file, $content);
?>
В результате выполнения этого примера, в файл 'mouse.txt', который находится в корневой папке сайта, будет записана строка 'Тише, мыши, кот на крыше'. Если файла не существует, то он будет создан. Если файл уже существовал, то его содержимое будет перезаписано.

У функции file_put_contents третьим параметром могут передаваться следующие флаги:
  • FILE_APPEND - заставляет функцию записывать передаваемые данные в конец файла. Используется часто для создания файлов с логами (историей каких-либо действий)
  • LOCK_EX - блокирует файл во время записи так, что никто не может прочитать или изменить его
  • FILE_USE_INCLUDE_PATH - ищет файл в подключаемых дерикториях. Этот флаг используется крайне редко
Можно использовать сразу несколько флагов. Для этого необходимо разделить их вертикальной чертой "|" при указании их в последнем параметре функции file_put_contents. Продемонстрируем это:
<?php 
   $file = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   $content = 'Тише, мыши, кот на крыше';
   file_put_contents($file, $content, FILE_APPEND | LOCK_EX);
?>
В результате выполнения такого кода, в конец файла 'mouse.txt' будет добавлена строчка 'Тише, мыши, кот на крыше'. А если файла не существовало, то он будет создан.

Проверка существования файла

Функция file_exists делает проверку существования файла. Принимает единственный параметр - полный путь к файлу. Часто используется внутри условия if( ), потому что выдает true, если файл существует, и false, если файл не существует. Потому что существует
<?php 
   $file = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   if(file_exists($file)){
      echo 'Файл существует';
   }
?>

Удаление файла

Для удаления файлов в PHP используется функция unlink. Ей, как и все предыдущим функциям, передаётся абсолютный путь к файлу в системе. Приведём пример удаления файла с её помощью, но перед удалением сделаем проверку существует ли вообще файл, который собираемся удалить:
<?php 
   $file = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   if(file_exists($file)){
      unlink($file);
      echo 'Файл существовал и был удалён';
   }
?>
Из-за особенностей работы UNIX систем, при удалении файла функцией unlink файл будет существовать до тех пор, пока существует хотя бы одна символическая или жёсткая ссылка не него.
Функция unlink возвращает true в случае успешного завершения удаления.

Переименование и перемещение файла

Функция rename в PHP умеет переименовывать файл или директорию. На вход она принимает два параметра: путь к файлу, который надо переименовать, и путь к файлу, который получится в результате переименовывания. Необходимо задавать полный путь:
<?php 
   $fileOld = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   $fileNew = $_SERVER['DOCUMENT_ROOT'] . '/cat.txt';
   rename($fileOld, $fileNew);
?>
В результате выполнения этой функции файл 'mouse.txt', который находится в корневой папке сайта, будет переименован в '/cat.txt'. Если файл '/cat.txt' уже существовал. то он обязательно будет перезаписан.

Как можно догадаться, эта функция умеет не только переименовывать файлы и папки, но и перемещать их в другие директори. Для этого в новом названии надо указать новый путь. К примеру:
<?php 
   $fileOld = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   $fileNew = $_SERVER['DOCUMENT_ROOT'] . '/home/mouse.txt';
   rename($fileOld, $fileNew);
?>
При выполнении такого кода файл 'mouse.txt' будет перемещён папку '/home/'. Функция rename возвращает true в случае успешного завершения переименования.

Копирование файла

Копирование файла в PHP выполняется с помощью функции copy. Которая похожа на функцию переименовывания. Она тоже принимает два параметра. Приведём пример использования:
<?php 
   $fileOld = $_SERVER['DOCUMENT_ROOT'] . '/mouse1.txt';
   $fileNew = $_SERVER['DOCUMENT_ROOT'] . '/mouse2.txt';
   copy($fileOld, $fileNew);
?>
В результате выполнения этой функции файл 'mouse1.txt', который находится в корневой папке сайта, будет скопирован в '/mouse2.txt'. Если '/mouse2.txt' уже существовал, то он будет перезаписан. Функция copy возвращает true в случае успешного завершения копирования.

Определение размера файла

Иногда появляется задача определения размера файла. Эта задача решается функцией filesize. У этой функции только один параметр - полный путь к файлу. И возвращает она размер файла, указанный в байтах. Попробуем применить функцию на практике:
<?php 
   $file = $_SERVER['DOCUMENT_ROOT'] . '/mouse.txt';
   echo 'Размер файла составляет ' . filesize($file) . ' байт';
?>








































preg_replace_callback

Функция preg_replace_callback очень похожа по своей работе на preg_replace, но позволяет ещё манипулировать содержанием карманов. К примеру, складывать значения в карманах. В отличии от preg_replace, у функции preg_replace_callback во втором параметре должно стоять название функции, которая будет применяться. В эту функцию будет передан массив из значений карманов:
<?php 
   function Sum($a){
      $sum = $a[1]+$a[2];
      return $a[0] . $sum;
   }
   echo preg_replace_callback('#(.)\+(.)=#', 'Sum', '2+3=');
?>
В результате выполнения этого кода появится строчка:
2+3=5
Разберёмся как она получается. Функции Sum будет передан массив из карманов: в нашем случае будет $a = array(0 => '2+3', 1 => '2', 2 => '3'). Внутри функции Sum происходит сложение значений карманов. Функция Sum возвращает строку, полученную из соединения найденного совпадения $a[0] и вычисленной суммы $a[1]+$a[2].

preg_quote

Функция preg_quote принимает регулярное выражение (строку) и возвращает её же, но с экранированными специальными символами. Это может быть полезно, если выражение формируется из нескольких частей вперемешку с PHP кодом. К примеру, "'#'.$a.'.'.$b.'#'".
<?php 
   echo preg_quote('Тише! Мыши + сыр');  // вернёт "Тише\! Мыши \+ сыр"
?>

preg_grep

Функция preg_grep полезна для работы с массивами. Она принимает массив и возвращает отфильтрованный массив из элементов, которые подходят под регулярное выражение.
<?php 
   $b = array('Тише', 'мыши', 'кот', 'на', 'крыше');
   $a = preg_grep('#ыш#u', $b);
   echo '<pre>';
   print_r($a);
   echo '</pre>';
?>
Под правило попадают только два элемента массива $b. Поэтому в результате выполнения кода примера будет выведено на экран:
Array
(
   [1] => мыши
   [4] => крыше
)

preg_split

Функция preg_split работает как функция explode, которая разбивает строку на массив. Но только разбивает, учитывая регулярное выражение. Приведём пример:
<?php 
   $a = preg_split('#, #u', 'Тише, мыши, кот на крыше');
   echo '<pre>';
   print_r($a);
   echo '</pre>';
?>
Строка будет разбита по всем совпадениям. Получится такой массив:
Array
(
   [0] => Тише
   [1] => мыши
   [2] => кот на крыше
)
Это конец темы регулярных выражений. Поэтому ещё раз напомним, что регулярными выражениями необходимо пользовать только в том случае, если нет никакого другого выхода.

Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных случаях, когда не остаётся ничего другого.
Читайте продолжение статьи: "Работа с файлами в PHP часть 2 (PHP_EOL, file, scandir, is_file, is_dir)"
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: