Чтение файла
Функция file_get_contents читает содержимое файла в строку. Можно прочитать как содержимое файла на сайте со скриптом, так и содержимое на удалённом сервере. Рассмотрим вариант с чтением локально расположенного файла:<?php
echo file_get_contents('mouse.txt');
?>
При выполнении этого кода на экран будет выведено содержание файла 'mouse.txt', который находится в той же папке, что и скрипт с кодом примера. Если необходимо указать файл в другом расположении, то нужно использовать полный путь к файлу в системе.
Если с полным путём возникнут проблемы, то можно воспользоваться адресом корневой папки сайта, который находится в переменной $_SERVER['DOCUMENT_ROOT'].
Тогда путь к файлу можно прописать как:
$_SERVER['DOCUMENT_ROOT'] . '/mouse.txt'
Тогда путь к файлу можно прописать как:
$_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 - ищет файл в подключаемых дерикториях. Этот флаг используется крайне редко
<?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)" Ошибки в регулярных выражениях - это очень частое явление. Поэтому прибегайте к этому инструменту только в самых-самых безвыходных случаях, когда не остаётся ничего другого.