Fopen: примеры (PHP)
Полное руководство по функции fopen с практическими примерами
Раздел: Работа с файлами
fopen(string $filename, string $mode, bool $use_include_path = false, ?resource $context = null): resource|falseФункция fopen в PHP
Описание функции
Функция fopen() в PHP используется для открытия файлов или URL-адресов. Она возвращает ресурс файла (file handle), который затем может использоваться другими функциями для работы с файлами.
Когда используется
- Чтение данных из файлов
- Запись информации в файлы
- Работа с удаленными ресурсами через HTTP/FTP
- Создание временных файлов в памяти
- Обработка больших файлов по частям
Аргументы функции
resource fopen(string $filename, string $mode, bool $use_include_path = false, resource $context = null)
- $filename - путь к файлу или URL
- $mode - режим открытия файла
- $use_include_path - поиск файла в include_path
- $context - контекст потока для работы с HTTP/FTP
Примеры использования fopen
Чтение файла
$file = fopen('data.txt', 'r');
if ($file) {
$content = fread($file, filesize('data.txt'));
fclose($file);
echo $content;
}// Выводит содержимое файла data.txt
Запись в файл
$file = fopen('output.txt', 'w');
fwrite($file, 'Новые данные');
fclose($file);// Создает файл output.txt с текстом 'Новые данные'
Добавление в конец файла
$file = fopen('log.txt', 'a');
fwrite($file, 'Новая запись\n');
fclose($file);// Добавляет строку в конец файла log.txt
Чтение и запись
$file = fopen('data.txt', 'r+');
$content = fread($file, 100);
fseek($file, 0);
fwrite($file, 'Обновленный текст');
fclose($file);// Открывает файл для чтения и записи, изменяет начало файла
Альтернативные функции в PHP
file_get_contents() / file_put_contents()
Для простого чтения/записи всего файла целиком. Не требуют ручного управления ресурсами.
$content = file_get_contents('file.txt');
file_put_contents('file.txt', 'Новый текст');SplFileObject
Объектно-ориентированный интерфейс для работы с файлами, поддерживает итерацию.
$file = new SplFileObject('data.txt');
foreach ($file as $line) {
echo $line;
}stream_context_create()
Для создания контекста потока с дополнительными параметрами HTTP-запросов.
Аналоги в других языках
Fopen в Python
# Открытие файла для чтения
with open('file.txt', 'r') as f:
content = f.read()
# Открытие файла для записи
with open('file.txt', 'w') as f:
f.write('Текст')JavaScript (Node.js)
const fs = require('fs');
// Асинхронное чтение
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// Синхронное чтение
const data = fs.readFileSync('file.txt', 'utf8');Fopen в MySQL
-- Загрузка данных из файла
LOAD DATA INFILE '/path/to/file.txt'
INTO TABLE table_name
FIELDS TERMINATED BY ',';
-- Выгрузка данных в файл
SELECT * INTO OUTFILE '/path/to/output.txt'
FROM table_name;Типичные ошибки
Отсутствие проверки результата
$file = fopen('несуществующий_файл.txt', 'r');
$content = fread($file, 100); // Ошибка: ресурс не созданWarning: fopen(несуществующий_файл.txt): failed to open stream: No such file or directory
Неправильный режим доступа
$file = fopen('readonly.txt', 'w');
fwrite($file, 'текст'); // Ошибка при отсутствии прав на записьWarning: fopen(readonly.txt): failed to open stream: Permission denied
Утечка ресурсов
function processFile() {
$file = fopen('data.txt', 'r');
// обработка файла
return; // Закрытие файла не вызвано
}// Файловый дескриптор остается открытым до завершения скрипта
Изменения в новых версиях PHP
PHP 8.0
- Функция теперь выбрасывает исключение ValueError при передаче некорректного режима открытия файла
- Улучшены сообщения об ошибках для большей информативности
PHP 7.4
- Добавлена поддержка проброса исключений в контексте работы с файлами
- Улучшена производительность при работе с большими файлами
// PHP 8.0 поведение
$file = fopen('test.txt', 'invalid_mode');ValueError: fopen(): Argument #2 ($mode) must be a valid mode
Расширенные примеры использования
Работа с CSV файлами
Пример php
$file = fopen('data.csv', 'r');
$headers = fgetcsv($file);
while ($row = fgetcsv($file)) {
$data[] = array_combine($headers, $row);
}
fclose($file);
print_r($data);Array
(
[0] => Array
(
[id] => 1
[name] => Иван
)
)Загрузка файла по HTTP с контекстом
Пример php
$opts = [
'http' => [
'method' => 'GET',
'header' => 'User-Agent: PHP-Script\r\n'
]
];
$context = stream_context_create($opts);
$file = fopen('https://api.example.com/data', 'r', false, $context);
$content = stream_get_contents($file);
fclose($file);// Содержимое полученное по HTTP
Временные файлы в памяти
Пример php
$tempFile = fopen('php://temp', 'r+');
fwrite($tempFile, 'Временные данные');
rewind($tempFile);
echo stream_get_contents($tempFile);
fclose($tempFile);Временные данные
Блокировка файла
Пример php
$file = fopen('shared.txt', 'c+');
if (flock($file, LOCK_EX)) {
fwrite($file, 'Безопасная запись');
flock($file, LOCK_UN);
}
fclose($file);// Файл записан с эксклюзивной блокировкой
Построчное чтение больших файлов
Пример php
$file = fopen('large_file.log', 'r');
$lineCount = 0;
while (!feof($file) && $lineCount < 1000) {
$line = fgets($file);
echo $line;
$lineCount++;
}
fclose($file);// Вывод первых 1000 строк файла
PHP fopen function comments
En
Fopen Opens file or URL