- PHP | Открытие, чтение, закрытие файлов
- Функция PHP fopen()
- Синтаксис
- Параметры
- Пример
- Чтение файла — fread()
- Закрытие файла — fclose()
- Синтаксис
- Однострочное чтение — fgets()
- Пример
- Проверка окончания файла — feof()
- Пример
- Чтение одного символа — fgetc()
- Пример
- Запись и чтение файлов в PHP
- Сохранение в файл
- File_put_contents:
- Fopen / fwrite:
- Возможные режимы fopen():
- Дописать строку в начало файла
- Дописать строку в конец файла
- Чтение из файла
- Чтение всего файла
- Чтение файла в массив
- Чтение файла сразу в браузер
- Получить первую строку из файла
- Первые три строки из файла:
- Получить последнюю строку из файла
- Последние три строки из файла:
- Запись и чтение массивов в файл
- Serialize
- Запись:
- Чтение:
- JSON
- Запись:
- Чтение:
PHP | Открытие, чтение, закрытие файлов
В этой уроке мы рассмотрим несколько функций, с помощью которых будем открывать, читать и закрывать файлы на сервере.
Функция PHP fopen()
Функция fopen() в PHP — это встроенная функция, которая используется для открытия файла или URL-адреса. В случае сбоя, она возвращает FALSE и выдаёт ошибку. Если вам нужно скрыть вывод ошибки добавьте символ ‘@’ перед именем функции.
Синтаксис
Параметры
- filename : Обязательный параметр, определяющий файл.
- mode : Обязательный параметр, определяющий тип доступа к файлу или потоку.
Он может иметь следующие возможные значения:- «r»: Открывает файл только для чтения; помещает указатель в начало файла.
- «r+»: Окрывает файл для чтения и записи; помещяет указатель в начало файла.
- «w»: Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
- «w+»: Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует — пробует его создать.
- «a»: Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
- «a+»: Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует — пытается его создать.
- «x»: Создаёт и открывает только для записи. Он создает новый файл и возвращает FALSE и ошибку, если файл уже существует.
- «x+»: Создаёт и открывает для чтения и записи. Создает новый файл и возвращает FALSE и ошибку, если файл уже существует.
- «c»: Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличие от ‘w’), и вызов к этой функции не вызывает ошибку (также как и в случае с ‘x’).
- «c+»: Открывает файл для чтения и записи; в остальном имеет то же поведение, что и ‘c’.
- «e»: Установить флаг close-on-exec (закрыть при запуске) на открытый файловый дескриптор. Доступно только в PHP скомпилированном на системах поддерживающих POSIX.1-2008.
В этом уроке мы будем использовать текстовый файл mane.txt:
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language
В следующем примере, ипользуя функцию fopen() , откроем файл «mane.txt» в режиме чтения:
Пример
echo fread($myfile,filesize("mane.txt"));
fclose($myfile);
?>Конструкция or die(«Невозможно открыть файл!») позволяет прекратить работу скрипта и вывесте некоторое сообщение об ошибке, если функция fopen не смогла открыть файл.
Чтение файла — fread()
Функция fread() считывает информацию из открытого файла.
Первый параметр fread() содержит имя файла для чтения, а второй параметр указывает максимальное количество байтов для чтения.
Следующий код PHP читает файл «mane.txt» до конца:
Закрытие файла — fclose()
Функция fclose() используется, чтобы закрыть открытый файл.
Синтаксис
bool fclose ( resource handle )
Функция закрывает файл, на который указывает handle.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Дескриптор должен указывать на файл, открытый ранее с помощью функции fopen() или fsockopen() .
Примечание: Хорошая практика программирования — закрывать все файлы после того, как вы закончили с ними работать. Дело в том, что открытый файл на вашем сервере продолжает занимать ресурсы!
Однострочное чтение — fgets()
Функция fgets() используется для чтения одной строки из файла.
В приведенном ниже примере выводится первая строка файла mane.txt:
Пример
echo fgets($myfile);
fclose($myfile);
?>Примечание: После вызова функции fgets() указатель файла переместился на следующую строку.
Проверка окончания файла — feof()
Функция feof() определяет, достигнут ли конец файла. Если в указанном дескрипторе, определяется окончание файла, возвращает True . В противном случае, False .
Функция feof() полезна для цикла работающего с данным неизвестной длины.
В приведенном ниже примере файл «mane.txt» считывается построчно, пока не будет достигнут конец файла:
Пример
while(!feof($myfile)) < // цикл завершится, при обнаружении конца файла
echo fgets($myfile) . "
"; // Вывести одну строку
>
?>Чтение одного символа — fgetc()
Функция fgetc() используется для чтения одного символа из файла.
В приведенном ниже примере файл «mane.txt» считывается посимвольно, пока не будет достигнут конец файла:
Пример
while(!feof($myfile)) < // цикл завершится, при обнаружении конца файла
echo fgetc($myfile) . "
"; // Вывести один символ
>
?>Примечание: Не перепутайте имя функции fgets() оканчивается символом s — string, а имя функции fgetc() оканчивается символом c — character.
Запись и чтение файлов в PHP
Примеры сохранения и чтения текстовых данных и массивов в файлы.
Сохранение в файл
Функция file_put_contents() записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.
File_put_contents:
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $filename = __DIR__ . '/file.txt'; file_put_contents($filename, $text);
Fopen / fwrite:
Набор функций fopen, fwrite, fclose предназначены для более гибкой работы с файлами.
- fopen – открытие или создание файла.
- fwrite – запись данных.
- fclose – закрытие файла.
$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $filename = __DIR__ . '/file.txt'; $fh = fopen($filename, 'w'); fwrite($fh, $text); fclose($fh);
Возможные режимы fopen():
Mode Описание r Открывает файл только для чтения, помещает указатель в начало файла. r+ Открывает файл для чтения и записи, помещает указатель в начало файла. w Открывает файл только для записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пробует его создать. w+ Открывает файл для чтения и записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пытается его создать. a Открывает файл только для записи, помещает указатель в конец файла. Если файл не существует – пытается его создать. a+ Открывает файл для чтения и записи, помещает указатель в конец файла. Если файл не существует – пытается его создать. x Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку. Если файл не существует, попытается его создать. x+ Создаёт и открывает для чтения и записи, в остальном имеет то же поведение, что и « x ». c Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от « w »), и вызов к этой функции не вызывает ошибку (также как и в случае с « x »). Указатель на файл будет установлен на начало файла. c+ Открывает файл для чтения и записи, в остальном имеет то же поведение, что и « c ». Доступно в место fwrite() используют fputs() , разницы ни какой т.к. эта функция является псевдонимом.
Дописать строку в начало файла
$new_str = 'New line of text.'; $filename = __DIR__ . '/file.txt'; $text = file_get_contents($filename); file_put_contents($filename, $new_str . PHP_EOL . $text);
Дописать строку в конец файла
$new_str = 'New line of text.'; $filename = __DIR__ . '/file.txt'; file_put_contents($filename, PHP_EOL . $new_str, FILE_APPEND);
$new_str = 'New line of text.'; $filename = __DIR__ . '/file.txt'; $fh = fopen($filename, 'c'); fseek($fh, 0, SEEK_END); fwrite($fh, PHP_EOL . $new_str); fclose($fh);
Чтение из файла
Чтение всего файла
$filename = __DIR__ . '/file.txt'; $text = file_get_contents($filename); echo $text;
$filename = __DIR__ . '/file.txt'; $text = ''; $fh = fopen($filename, 'r'); while (!feof($fh)) < $line = fgets($fh); $text .= $line . PHP_EOL; >fclose($fh); echo $text;
Чтение файла в массив
Функция file() – читает содержимое файла и помещает его в массив, доступны опции:
- FILE_IGNORE_NEW_LINES – пропускать новую строку в конце каждого элемента массива.
- FILE_SKIP_EMPTY_LINES – пропускать пустые строки.
$filename = __DIR__ . '/file.txt'; $array = file($filename); print_r($array);
Чтение файла сразу в браузер
$filename = __DIR__ . '/file.txt'; readfile($filename);
Получить первую строку из файла
$filename = __DIR__ . '/file.txt'; $fh = fopen($filename, 'r'); echo fgets($fh); fclose($fh); /* или */ $filename = __DIR__ . '/file.txt'; $array = file($filename); echo $array[0];
Первые три строки из файла:
$filename = __DIR__ . '/file.txt'; $array = file($filename); $first_3 = array_slice($array, 0, 3); print_r($first_3);
Получить последнюю строку из файла
$filename = __DIR__ . '/file.txt'; $array = file($filename); $last = array_slice($array, -1); echo $last[0];
Последние три строки из файла:
$filename = __DIR__ . '/file.txt'; $array = file($filename); $last_3 = array_slice($array, -3); print_r($last_3);
Запись и чтение массивов в файл
Serialize
Не очень удачное хранение данных в сериализованном виде т.к. изменение одного символа может привести к ошибке чтения всех данных в файле. Подробнее в статье «Функция serialize, возможные проблемы»
Запись:
$array = array('foo', 'bar', 'hallo', 'world'); $text = base64_encode(serialize($array)); file_put_contents(__DIR__ . '/array.txt', $text);
Чтение:
$array = unserialize(base64_decode($text)); print_r($array);
JSON
Запись:
$array = array('foo', 'bar', 'hallo', 'world'); $json = json_encode($array, JSON_UNESCAPED_UNICODE); file_put_contents(__DIR__ . '/array.json', $json);
Чтение:
$json = file_get_contents(__DIR__ . '/array.json'); $array = json_decode($json, true); print_r($array);