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

Открытие файла с помощью PHP-функции fopen()

Для работы с файлом вам сначала нужно открыть файл. Функция PHP fopen() используется для открытия файла. Базовый синтаксис этой функции может быть задан следующим образом:

fopen(filename, mode)

Первый параметр, передаваемый в fopen(), указывает имя файла, который вы хотите открыть, а второй параметр указывает, в каком режиме файл должен быть открыт. Например:

<?php
$handle = fopen("data.txt", "r");
?>

Файл можно открыть в одном из следующих режимов:

Режим Что он делает
r Открывает файл только для чтения.
r+ Открывает файл для чтения и записи.
w Открывает файл только для записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать.
w+ Открывает файл для чтения, записи и очищает содержимое файла. Если файл не существует, PHP попытается его создать.
a Открывает файл только для записи. Сохраняет содержимое файла, записывая его в конец. Если файл не существует, PHP попытается его создать.
a+ Открывает файл для чтения и записи. Сохраняет содержимое файла, записывая его в конец. Если файл не существует, PHP попытается его создать.
x Открывает файл только для записи. Возвращает FALSE и выдает ошибку, если файл уже существует. Если файл не существует, PHP попытается его создать.
x+ Открывает файл для чтения и записи; в противном случае он ведет себя так же, как ‘x’.

Если вы попытаетесь открыть несуществующий файл, PHP выдаст предупреждающее сообщение. Итак, чтобы избежать появления этих сообщений об ошибках, вы всегда должны выполнять простую проверку, существует ли файл или каталог, прежде чем пытаться получить к нему доступ, с помощью PHP-функции file_exists().

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Попытка открыть файл
    $handle = fopen($file, "r");
} else{
    echo "ERROR: File does not exist.";
}
?>

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

Закрытие файла с помощью PHP-функции fclose()

Закончив работу с файлом, его нужно закрыть. Функция fclose() используется для закрытия файла, как показано в следующем примере:

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Открываем файл для чтения
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    /* Некоторый код для выполнения */
        
    // Закрываем дескриптор файла
    fclose($handle);
} else{
    echo "ERROR: File does not exist.";
}
?>

Хотя PHP автоматически закрывает все открытые файлы при завершении скрипта, рекомендуется закрывать файл после выполнения всех операций.

Чтение файлов с помощью PHP-функции fread()

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

Чтение фиксированного количества символов

Функцию fread() можно использовать для чтения указанного количества символов из файла. Базовый синтаксис этой функции можно задать с помощью.

fread(file handle, length in bytes)

Эта функция принимает два параметра — дескриптор файла и количество байтов для чтения. В следующем примере из файла data.txt считывается 20 байтов, включая пробелы. Предположим, файл data.txt содержит абзац текста «The quick brown fox jumps over the lazy dog.»

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Открываем файл для чтения
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    // Читаем фиксированное количество байтов из файла
    $content = fread($handle, "20");
        
    // Закрываем дескриптора файла
    fclose($handle);
        
    // Отображаем содержимое файла
    echo $content; // Выводит: The quick brown fox
} else{
    echo "ERROR: File does not exist.";
}
?>

Чтение всего содержимого файла

Функцию fread() можно использовать вместе с функцией filesize() для одновременного чтения всего файла. Функция filesize() возвращает размер файла в байтах.

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Открываем файл для чтения
    $handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
        
    // Читаем весь файл
    $content = fread($handle, filesize($file));
        
    // Закрываем дескриптора файла
    fclose($handle);
        
    // Отображаем содержимое файла
    echo $content; // Выводит: The quick brown fox jumps over the lazy dog.
} else{
    echo "ERROR: File does not exist.";
}
?>

Самый простой способ прочитать все содержимое файла в PHP — использовать функцию readfile(). Эта функция позволяет вам читать содержимое файла, не открывая его. В следующем примере будет сгенерирован тот же результат, что и в примере выше:

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Читаем и выводим весь файл
    readfile($file) or die("ERROR: Cannot open the file.");
} else{
    echo "ERROR: File does not exist.";
}
?>

Другой способ прочитать все содержимое файла без необходимости его открытия — использовать функцию file_get_contents(). Эта функция принимает имя и путь к файлу и считывает весь файл в строковую переменную. Вот пример:

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Читаем весь файл в строку
    $content = file_get_contents($file) or die("ERROR: Cannot open the file.");
        
    // Отображаем содержимое файла
    echo $content;
} else{
    echo "ERROR: File does not exist.";
}
?>

Еще один метод чтения всех данных из файла — это PHP-функция file(). Она выполняет ту же работу, что и функция file_get_contents(), но возвращает содержимое файла в виде массива строк, а не отдельной строки. Каждый элемент возвращаемого массива соответствует строке в файле.

Для обработки данных файла необходимо выполнить итерацию по массиву с помощью цикла foreach. Вот пример, который считывает файл в массив, а затем отображает его с помощью цикла:

<?php
$file = "data.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Читаем и преобразуем весь файл в массив
    $arr = file($file) or die("ERROR: Cannot open the file.");
    foreach($arr as $line){
        echo $line;
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

Запись файлов с помощью PHP-функции fwrite()

Точно так же вы можете записывать или добавлять данные в существующий файл с помощью PHP-функции fwrite(). Базовый синтаксис этой функции может быть задан следующим образом:

fwrite(file handle, string)

Функция fwrite() принимает два параметра — дескриптор файла и строку данных, которые должны быть записаны, как показано в следующем примере:

<?php
$file = "note.txt";
    
// Строка данных для записи
$data = "The quick brown fox jumps over the lazy dog.";
    
// Открываем файл для записи
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
    
// Пишем данные в файл
fwrite($handle, $data) or die ("ERROR: Cannot write the file.");
    
// Закрываем дескриптор файла
fclose($handle);
    
echo "Data written to the file successfully.";
?>

В приведенном выше примере, если файл note.txt не существует, PHP автоматически создаст его и запишет данные. Но если файл note.txt уже существует, PHP удалит содержимое этого файла, если оно есть, перед записью новых данных, однако, если вы просто хотите добавить файл и сохранить существующее содержимое, просто используйте режим a вместо w в приведенном выше примере.

Альтернативный способ — использовать функцию file_put_contents(). Это аналог функции file_get_contents() и простой метод записи данных в файл без необходимости его открытия. Эта функция принимает имя и путь к файлу вместе с данными, которые будут записаны в файл. Вот пример:

<?php
$file = "note.txt";
    
// Строка данных для записи
$data = "The quick brown fox jumps over the lazy dog.";
    
// Пишем данные в файл
file_put_contents($file, $data) or die("ERROR: Cannot write the file.");
    
echo "Data written to the file successfully.";
?>

Если файл, указанный в функции file_put_contents(), уже существует, PHP по умолчанию перезапишет его. Если вы хотите сохранить содержимое файла, вы можете передать специальный флаг FILE_APPEND в качестве третьего параметра функции file_put_contents(). Он просто добавит новые данные в файл вместо того, чтобы перезаписывать его. Вот пример:

<?php
$file = "note.txt";
    
// Строка данных для записи
$data = "The quick brown fox jumps over the lazy dog.";
    
// Пишем данные в файл
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file.");
    
echo "Data written to the file successfully.";
?>

Переименование файлов с помощью PHP-функции rename()

Вы можете переименовать файл или каталог с помощью PHP-функции rename(), например:

<?php
$file = "file.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Пытаемся переименовать файл
    if(rename($file, "newfile.txt")){
        echo "File renamed successfully.";
    } else{
        echo "ERROR: File cannot be renamed.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

Вы можете удалять файлы или каталоги с помощью PHP-функции unlink(), например:

<?php
$file = "note.txt";
 
// Проверяем наличие файла
if(file_exists($file)){
    // Пытаемся удалить файл
    if(unlink($file)){
        echo "File removed successfully.";
    } else{
        echo "ERROR: File cannot be removed.";
    }
} else{
    echo "ERROR: File does not exist.";
}
?>

В следующей главе мы узнаем больше о разборе каталогов или папок в PHP.

Функции файловой системы PHP

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

Функция Описание
fgetc() Читает по одному символу за раз.
fgets() Читает по одной строке за раз.
fgetcsv() Читает строку значений, разделенных запятыми.
filetype() Возвращает тип файла.
feof() Проверяет, достигнут ли конец файла.
is_file() Проверяет, является ли файл обычным файлом.
is_dir() Проверяет, является ли файл каталогом.
is_executable() Проверяет, является ли файл исполняемым.
realpath() Возвращает канонизированный абсолютный путь.
rmdir() Удаляет пустой каталог.

Пожалуйста, ознакомьтесь со справочником по файловой системе PHP, чтобы узнать о других полезных функциях файловой системы PHP.

Похожие посты

Руководство по загрузке файлов на сервер в PHP

В этом руководстве мы узнаем, как загружать файлы на удаленный сервер с помощью простой HTML-формы и PHP. Вы можете загружать файлы любого типа, например изображения, видео, ZIP-файлы, документы Microsoft Office, PDF-файлы, а также исполняемые файлы и множество других типов файлов. Шаг 1. Создание HTML-формы для загрузки файла В следующем примере будет создана простая HTML-форма, которую…

Руководство по GET и POST запросам в PHP

Веб-браузер связывается с сервером, как правило, с помощью одного из двух HTTP-методов (протокола передачи гипертекста) — GET и POST. Оба метода передают информацию по-разному и имеют разные преимущества и недостатки, как описано ниже. PHP-метод GET В методе GET данные отправляются в виде параметров URL, которые обычно представляют собой строки пар имени и значения, разделенные амперсандами…

Список сообщений об ошибках в PHP

Обычно, когда движок PHP сталкивается с проблемой, препятствующей правильной работе скрипта, он генерирует сообщение об ошибке. Существует шестнадцать различных уровней ошибок, и каждый уровень представлен целым числом и связанной с ним константой. Вот список уровней ошибок: Название Значение Описание E_ERROR 1 Неустранимая ошибка времени выполнения от которой невозможно избавиться. Выполнение скрипта немедленно прекращается E_WARNING 2…

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.