- file_get_contents
- Список параметров
- Возвращаемые значения
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- file_put_contents
- Список параметров
- Возвращаемые значения
- Примеры
- Список изменений
- Примечания
- Смотрите также
- Запись и чтение файлов в PHP
- Сохранение данных в файл
- Функция file_put_contents()
- Функции fopen() / fwrite()
- Дописать строку в начало файла
- Дописать строку в конце файла
- Записать массив в файл
- Функция serialize()
- Функция json_encode()
- Чтение из файла
- Чтение из файла в массив
- Чтение файла в браузер
- Получить первую строку из файла
- Получить последнюю строку из файла
file_get_contents
Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до length байт. В случае неудачи, file_get_contents() вернёт false .
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI, содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .
Список параметров
Замечание:
Можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Только помните, что если вы используете строгую типизацию, то так сделать не получится, поскольку FILE_USE_INCLUDE_PATH имеет тип int . В таком случае используйте true .
Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение null .
Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.
Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтённые данные или false в случае возникновения ошибки.
Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Ошибки
Будет сгенерирована ошибка уровня E_WARNING в случаях, если не удастся найти filename , задан length меньше нуля, или поиск по смещению offset в потоке завершится неудачно.
Когда file_get_contents() вызывается в каталоге, в Windows ошибка генерируется E_WARNING , а с PHP 7.4 также в других операционных системах.
Список изменений
Версия | Описание |
---|---|
8.0.0 | Параметр length теперь допускает значение null . |
7.1.0 | Добавлена поддержка отрицательных значений offset . |
Примеры
Пример #1 Получить и вывести исходный код домашней страницы сайта
Пример #2 Поиск файлов в include_path
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents ( ‘./people.txt’ , true );
// Иначе
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>?php
Пример #3 Чтение секции файла
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( ‘./people.txt’ , FALSE , NULL , 20 , 14 );
var_dump ( $section );
?>?php
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
// Создаём поток
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);
?php
$context = stream_context_create ( $opts );
// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых обёрток URL, их возможности, замечания по использованию и список предопределённых констант в разделе Поддерживаемые протоколы и обёртки.
При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify . PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обёртки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
- file() — Читает содержимое файла и помещает его в массив
- fgets() — Читает строку из файла
- fread() — Бинарно-безопасное чтение файла
- readfile() — Выводит файл
- file_put_contents() — Пишет данные в файл
- stream_get_contents() — Читает оставшуюся часть потока в строку
- stream_context_create() — Создаёт контекст потока
- $http_response_header
file_put_contents
Функция идентична последовательным успешным вызовам функций fopen() , fwrite() и fclose() .
Если filename не существует, файл будет создан. Иначе, существующий файл будет перезаписан, за исключением случая, если указан флаг FILE_APPEND .
Список параметров
Путь к записываемому файлу.
Записываемые данные. Может быть string , array или ресурсом stream .
Если data является ресурсом stream , оставшийся буфер этого потока будет скопирован в указанный файл. Это похоже на использование функции stream_copy_to_stream() .
Также вы можете передать одномерный массив в качестве параметра data . Это будет эквивалентно вызову file_put_contents($filename, implode(», $array)).
Значением параметра flags может быть любая комбинация следующих флагов, соединенных бинарным оператором ИЛИ (|).
Флаг | Описание |
---|---|
FILE_USE_INCLUDE_PATH | Ищет filename в подключаемых директориях. Подробнее смотрите директиву include_path. |
FILE_APPEND | Если файл filename уже существует, данные будут дописаны в конец файла вместо того, чтобы его перезаписать. |
LOCK_EX | Получить эксклюзивную блокировку на файл на время записи. |
Корректный ресурс контекста, созданный с помощью функции stream_context_create() .
Возвращаемые значения
Функция возвращает количество записанных байт в файл, или FALSE в случае ошибки.
Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Примеры
Пример #1 Пример простого использования
$file = ‘people.txt’ ;
// Открываем файл для получения существующего содержимого
$current = file_get_contents ( $file );
// Добавляем нового человека в файл
$current .= «John Smith\n» ;
// Пишем содержимое обратно в файл
file_put_contents ( $file , $current );
?>?php
Пример #2 Использование флагов
$file = ‘people.txt’ ;
// Новый человек, которого нужно добавить в файл
$person = «John Smith\n» ;
// Пишем содержимое в файл,
// используя флаг FILE_APPEND flag для дописывания содержимого в конец файла
// и флаг LOCK_EX для предотвращения записи данного файла кем-нибудь другим в данное время
file_put_contents ( $file , $person , FILE_APPEND | LOCK_EX );
?>?php
Список изменений
Версия | Описание |
---|---|
5.1.0 | Добавлена поддержка LOCK_EX и возможность передачи потокового ресурса в параметр data |
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых оберток URL, их возможности, замечания по использованию и список предопределенных констант в Поддерживаемые протоколы и обработчики (wrappers).
Смотрите также
- fopen() — Открывает файл или URL
- fwrite() — Бинарно-безопасная запись в файл
- file_get_contents() — Читает содержимое файла в строку
- stream_context_create() — Создаёт контекст потока
Запись и чтение файлов в PHP
Не пропусти свежие посты, подпишись:
Сохранение данных в файл
Самым простым способом записи данных файл, является вызов функции file_put_contents(). Функция принимает 3 аргумента, путь к файлу, данные и флаг позволяющий немного изменить поведение функции. Она записывает содержание переменной в файл. Если файл не найден, то она попытается его создать, если же файл существует, то по умолчанию, функция полностью перезапишет данные в нём. Чтобы изменить это, следует третьим аргументом передать флаг FILE_APPEND , тогда данные будут дописаны в конец файла.
Функция file_put_contents()
$data = 'Некоторые данные для сохранения а файл ' . date('d.m.Y H:i:s') . "\n"; $filePath = __DIR__ . '/log.txt'; file_put_contents($filePath, $data);
Функции fopen() / fwrite()
Функции fopen(), fwrite(), fclose() связаны предназначены для гибкой работы с файлами.
- fopen() — открытие или создание файла.
- fwrite() — запись данных.
- fclose() — закрытие файла.
$data = 'Некоторые данные для сохранения а файл ' . date('d.m.Y H:i:s') . "\n"; $filePath = __DIR__ . '/log.txt'; $fh = fopen($filePath, 'w'); fwrite($fh, $data); fclose($fh);
Дописать строку в начало файла
$addData = 'Дополнительные данные ' . date('d.m.Y H:i:s') . "\n"; $filePath = __DIR__ . '/log.txt'; //Пример с предварительным получением содержимого существующего файла $currentLog = file_get_contents($filePath); file_put_contents($filePath, $addData . $currentLog);
Дописать строку в конце файла
$addData = 'Дополнительные данные ' . date('d.m.Y H:i:s') . "\n"; $filePath = __DIR__ . '/log.txt'; //Пример с флагом file_put_contents($filePath, $addData, FILE_APPEND );
$addData = 'Дополнительные данные ' . date('d.m.Y H:i:s') . "\n"; $filePath = __DIR__ . '/log.txt'; $fh = fopen($filePath, 'a'); fwrite($fh, $data); fclose($fh);
Записать массив в файл
При записи массивов в файл их предварительно нужно преобразовать в строку, путём сериализации массива или же конвертированию в JSON.
Функция serialize()
$arr = ['foo', 'bar', 'hallo', 'world']; $text = base64_encode(serialize($arr)); file_put_contents(__DIR__ . '/log.txt', $text);
Функция json_encode()
$arr = ['foo', 'bar', 'hallo', 'world']; $text = json_encode($arr, JSON_UNESCAPED_UNICODE); file_put_contents(__DIR__ . '/log.json', $text);
Чтение из файла
$filePath = __DIR__ . '/log.txt'; $log = file_get_contents($filePath); echo $log;
$log = ''; $fh = fopen($filePath, 'r'); while (!feof($fh)) < $line = fgets($fh); $log .= $line . "\n"; >fclose($fh); echo $log;
Чтение из файла в массив
Если файл содержит данные подразумевающие дальнейшую конвертацию в массив для удобства работы, вы можете использовать готовую функцию file(). Функция принимает 3 аргумента, обязательный путь к файлу и необязательные, флаг влияющий на поведение функции при чтении файла, а так же контекст.
- FILE_USE_INCLUDE_PATH — функция ищет файл в include_path
- FILE_IGNORE_NEW_LINES — Пропускать новую строку в конце каждого элемента массива
- FILE_SKIP_EMPTY_LINES — Пропускать пустые строки
$filePath = __DIR__ . '/log.txt'; $arr = file($filePath); print_r($arr);
Чтение файла в браузер
$filePath = __DIR__ . '/log.txt'; readfile($filePath);
Получить первую строку из файла
$filePath = __DIR__ . '/log.txt'; $fh = fopen($filePath, 'r'); echo fgets($fh); fclose($fh);
$filePath = __DIR__ . '/log.txt'; $arr = file($filePath); echo $arr[0];
$filePath = __DIR__ . '/log.txt'; $arr = file($filePath); $line3 = array_slice($arr, 0, 3); //получаем первые 3 строки print_r($line3);
Получить последнюю строку из файла
Тут всё основано на преобразовании содержимого файла в массив и дальнейшее его чтение по индексам.
$filePath = __DIR__ . '/log.txt'; $arr = file($arr); $lastLine = array_slice($array, -1); echo $lastLine[0];
Получим последние 3 строки из файла
$filePath = __DIR__ . '/log.txt'; $arr = file($arr); $last3 = array_slice($array, -3); print_r($last3);
Надеюсь пост был вам полезен! Удачи! )
Не пропусти свежие посты, подпишись: