Полный цикл в digital

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

В 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 представляет путь к файлу, а второй — режим открытия. В зависимости от цели открытия и типа файла данный параметр может принимать следующие значения:

  1. r файл открывается только для чтения. Если файла не существует, возвращает false
  2. r+ файл открывается только для чтения с возможностью записи. Если файла не существует, возвращает false
  3. w файл открывается для записи. Если такой файл уже существует, то он перезаписывается, если нет — то он создается
  4. w+ файл открывается для записи с возможностью чтения. Если такой файл уже существует, то он перезаписывается, если нет — то он создается
  5. a файл открывается для записи. Если такой файл уже существует, то данные записываются в конец файла, а старые данные остаются. Если файл не существует, то он создается
  6. 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 — смещение в байтах относительно начала файла, с которого начнется считывание/запись. Третий необязательный параметр задает способ установки смещения. Он может принимать три значения:

  1. SEEK_SET значение по умолчанию, устанавливает смещение в offset байт относительно начала файла
  2. SEEK_CUR устанавливает смещение в offset байт относительно начала текущей позиции в файле
  3. 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 не существует";
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг