Readfile: примеры (PHP)
readfile(string $filename, bool $use_include_path = false, ?resource $context = null): int|falseФункция readfile в PHP предназначена для чтения файла и вывода его содержимого напрямую в буфер вывода.
Основная задача функции - эффективная передача содержимого файла (например, изображения, PDF-документа или CSS-файла) клиенту без необходимости загружать файл полностью в память скрипта. Эта функция часто используется для раздачи статических файлов с применением HTTP-заголовков.
- filename (string, обязательный): Путь к читаемому файлу.
- use_include_path (bool, необязательный, по умолчанию
false): Если установлен вtrue, функция также ищет файл в include_path. - context (resource, необязательный): Ресурс контекста потока, созданный с помощью функции
stream_context_create().
Функция возвращает количество прочитанных байтов из файла в случае успеха или false в случае неудачи.
Код:
<?php
// Выводит содержимое файла в браузер
$bytes = readfile('document.txt');
echo "\nПрочитано байт: $bytes";
?>Результат (зависит от содержимого document.txt):
Содержимое текстового файла. Прочитано байт: 25
Код:
<?php
// Поиск файла в директориях include_path
set_include_path('/www/files/');
$bytes = readfile('data.txt', true);
echo "Прочитано: $bytes байт";
?>В PHP существует несколько альтернатив для чтения файлов, каждая со своей спецификой.
Читает весь файл в строку. Предпочтительнее, когда нужно обработать содержимое файла в скрипте, а не отправить его напрямую клиенту.
Набор функций для поточного чтения больших файлов частями. Используется при работе с файлами, размер которых превышает доступную память.
Выводит файл с подсветкой синтаксиса. Применяется для демонстрации исходного кода.
Readfile в Python
Для аналогичного поведения в Python используется отправка файла через веб-фреймворк или комбинация open() и вывода.
with open('document.txt', 'r') as f:
print(f.read())В Node.js для чтения и вывода файла используется модуль fs вместе с потоком ответа.
const fs = require('fs');
const http = require('http');
http.createServer((req, res) => {
fs.readFile('file.txt', (err, data) => {
res.end(data);
});
}).listen(8080);Readfile в MySQL
Прямого аналога нет, но для чтения файла в таблицу можно использовать LOAD_FILE().
Код:
<?php
$result = readfile('несуществующий_файл.txt');
if ($result === false) {
echo "Ошибка при чтении файла.";
}
?>Результат:
Warning: readfile(несуществующий_файл.txt): Failed to open stream: No such file or directory in ... Ошибка при чтении файла.
Попытка отправить файл после вывода обычного текста или HTML приведет к ошибке или некорректной работе.
В PHP 8.0 функция readfile была сделана более строгой в отношении типов аргументов. Передача аргументов неверного типа теперь вызывает TypeError. В версии 7.4 были улучшены производительность и обработка ошибок при работе с потоками.
Код для принудительной загрузки файла браузером:
<?php
$file = 'archive.zip';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>Чтение защищенного файла через HTTP-авторизацию:
<?php
$opts = [
'http' => [
'method' => 'GET',
'header' => "Authorization: Basic " . base64_encode("user:pass")
]
];
$context = stream_context_create($opts);
readfile('http://example.com/protected/data.csv', false, $context);
?>Прямая передача изображения в браузер:
<?php
header('Content-Type: image/jpeg');
readfile('photo.jpg');
?>