Работа с файлами в 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, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: