Работа с файлами
В PHP существует несколько ключевых функций и методов, которые позволяют вам получать доступ к файлам, читать их содержимое, записывать данные, управлять директориями и выполнять другие операции, связанные с файловой системой.
Функции для работы с файлами
file_get_contents()
чтение содержимого файла, подробнееfile()
получение содержимого файла в виде массива, разделителем элементов служит символ переноса строки, подробнееfopen()
открытие (или создание и открытие) файла. Функция возвращает дескриптор — ссылку, указатель на файл, который можно передавать в другие функции, подробнееfile_put_contents()
создание файла и запись в него данных, подробнееfwrite()
запись данных в файл, подробнееunlink()
удаление файла, подробнееrename()
переименование и перенос файла в другую папку, подробнееcopy()
копирование файла, подробнееfseek()
работа с указателем файла, подробнееis_file()
определяет, является ли указанный путь файлом, подробнееfile_exists()
проверяет, существует ли файл или директория с указанным именем, подробнее
Чтение содержимого файла, file_get_contents ()
Если нам надо прочитать файл полностью, то мы можем облегчить себе жизнь, применив функцию file_get_contents()
:
<?
$str = htmlentities(file_get_contents("form.php"));
echo $str;
Получение содержимого файла в виде массива, file ()
Функция file()
— читает содержимое файла и помещает его в массив, доступны опции:
FILE_IGNORE_NEW_LINES
пропускать новую строку в конце каждого элемента массиваFILE_SKIP_EMPTY_LINES
пропускать пустые строки
<?
$filename = __DIR__ . '/file.txt';
$array = file($filename);
print_r($array);
Открытие, или создание и открытие файла, fopen ()
Для открытия файлов в PHP определена функция fopen()
. Она имеет следующее определение: resource fopen(string $filename, string $mode)
. Первый параметр $filename
представляет путь к файлу, а второй — режим открытия. В зависимости от цели открытия и типа файла данный параметр может принимать следующие значения:
r
файл открывается только для чтения. Если файла не существует, возвращаетfalse
r+
файл открывается только для чтения с возможностью записи. Если файла не существует, возвращаетfalse
w
файл открывается для записи. Если такой файл уже существует, то он перезаписывается, если нет — то он создаетсяw+
файл открывается для записи с возможностью чтения. Если такой файл уже существует, то он перезаписывается, если нет — то он создаетсяa
файл открывается для записи. Если такой файл уже существует, то данные записываются в конец файла, а старые данные остаются. Если файл не существует, то он создаетсяa+
файл открывается для чтения и записи. Если файл уже существует, то данные дозаписываются в конец файла. Если файла нет, то он создается
Результатом функции fopen будет дескриптор файла. Этот дескриптор используется для операций с файлом и для его закрытия.
После окончания работы файл надо закрыть с помощью функции fclose()
, которая принимает в качестве параметра дескриптор файла. Например, откроем и закроем файл:
<?
$fd = fopen("form.php", 'r') or die("не удалось открыть файл");
fclose($fd);
Конструкция or die("текст ошибки")
позволяет прекратить работу скрипта и вывесте некоторое сообщение об ошибке, если функция fopen
не смогла открыть файл.
Поблочное считывание
Также можно провести поблочное считывание, то есть считывать определенное количество байт из файла с помощью функции fread()
:
<?
$fd = fopen("form.php", 'r') or die("не удалось открыть файл");
while(!feof($fd)) {
$str = htmlentities(fread($fd, 600));
echo $str;
}
fclose($fd);
Функция fread()
принимает два параметра: дескриптор считываемого файла и количество считываемых байтов. При считывании блока указатель в файле становится в конец этого блока. И также с помощью функции feof()
можно отследить завершение файла.
Создание файла и запись в него данных, file_put_contents ()
Функция file_put_contents()
записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.
<?
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$filename = __DIR__ . '/file.txt';
file_put_contents($filename, $text);
Запись данных в файл, fwrite ()
Для записи файла применяется функция fwrite()
, которая записывает в файл строку:
<?
$fd = fopen("hello.txt", 'w') or die("не удалось создать файл");
$str = "Привет мир";
fwrite($fd, $str);
fclose($fd);
Аналогично работает другая функция fputs()
:
<?
$fd = fopen("hello.txt", 'w') or die("не удалось создать файл");
$str = "Привет мир";
fputs($fd, $str);
fclose($fd);
Удаление файла, unlink ()
Для удаления файла применяется функция unlink
, которая принимает имя файла и возвращает
значение true
при успешном удалении файла:
<?
if (unlink("hello_copy.txt")) {
echo "Файл удален";
} else {
echo "Ошибка при удалении файла";
};
Переименование и перенос файла в другую папку, rename ()
Для перемещения файла применяется функция rename()
:
<?
if (!rename("hello.txt", "subdir/hello.txt")) {
echo "Ошибка перемещения файла";
} else {
echo "Файл перемещен";
};
Если у нас в каталоге файла hello.txt имеется подкаталог subdir, то
файл будет в него перемещен. Если файл был успешно перемещен, функция возвратит значение true
.
Копирование файла, copy ()
Для копирования файла используется функция copy()
. Она принимает имя копируемого файла, и имя
копии файла. И если копирование прошло успешно, возвращает значение true
:
<?
if (copy("hello.txt", "hello_copy.txt")) {
echo "Копия файла создана";
} else {
echo "Ошибка копирования файла";
};
Работа с указателем файла, fseek ()
При открытии файла для чтения или записи в режиме w
, указатель в файле помещается в начало. При считывании данных PHP перемещает указатель в файле в конец блока считанных данных. Однако мы также вручную можем управлять указателем в файле и устанавливать его в произвольное место. Для этого надо использовать функцию fseek
, которая имеет следующее формальное определение:
<? int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ] )
Параметр $handle
представляет дескриптор файла. Параметр $offset
— смещение в байтах относительно начала файла, с которого начнется считывание/запись. Третий необязательный параметр задает способ установки смещения. Он может принимать три значения:
SEEK_SET
значение по умолчанию, устанавливает смещение вoffset
байт относительно начала файлаSEEK_CUR
устанавливает смещение вoffset
байт относительно начала текущей позиции в файлеSEEK_END
устанавливает смещение вoffset
байт от конца файла
В случае удачной установки указателя функция fseek()
возвращает 0, а при неудачной установке возвращает -1. Пример использования функции:
<?
$fd = fopen("hello.txt", 'w+') or die("не удалось открыть файл");
// строка для записи
$str = "Привет мир!";
// запишем строку в начало
fwrite($fd, $str);
// поместим указатель файла в начало
fseek($fd, 0);
// запишем в начало строку
fwrite($fd, "Хрю");
// поместим указатель в конец
fseek($fd, 0, SEEK_END);
// запишем в конце еще одну строку
fwrite($fd, $str);
fclose($fd);
Определяет, является ли указанный путь файлом, is_file ()
Пусть у вас есть строка, содержащая путь к файлу. С помощью специальной функций is_file()
мы можем отличить, ссылается путь на файл:
<?
$path = 'путь';
// true для файла, false для папки
var_dump(is_file($path));
Проверяет, существует ли файл или директория с указанным именем, file_exists ()
Проверить существование файла или каталога в PHP можно с помощью функции file_exists()
. Она принимает путь к файлу или каталогу и возвращает TRUE
, если файл или каталог существует, иначе возвращает FALSE
:
<?
$filename = '/path/to/foo.txt';
if (file_exists($filename)) {
echo "Файл $filename существует";
} else {
echo "Файл $filename не существует";
}