File put contents: примеры (PHP)
file_put_contents(string $filename, mixed $data, int $flags = 0, ?resource $context = null): int|falseФункция file_put_contents записывает строку в файл. Это более простой альтернативный вариант последовательным вызовам функций fopen, fwrite и fclose.
Функция используется, когда требуется выполнить однократную операцию записи или полностью перезаписать содержимое файла.
- filename (строка) - Путь к файлу, в который производится запись.
- data (mixed) - Записываемые данные. Могут быть строкой, массивом или потоковым ресурсом. Если передается массив, его элементы будут записаны в том же порядке.
- flags (int) - Битовая маска флагов:
FILE_USE_INCLUDE_PATH- искать файл в include_path.FILE_APPEND- добавить данные в конец файла, а не перезаписывать его.LOCK_EX- получить эксклюзивную блокировку на файл на время записи.
- context (resource) - Корректный контекст потока, созданный с помощью
stream_context_create().
Функция возвращает количество записанных байт или false в случае ошибки.
<?php
$file = 'test.txt';
$data = "Первая строка\n";
$result = file_put_contents($file, $data);
echo "Записано байт: $result"; // Записано байт: 26 (зависит от кодировки)
?>Содержимое файла test.txt: Первая строка
<?php
$file = 'log.txt';
$entry = date('Y-m-d H:i:s') . " - событие\n";
file_put_contents($file, $entry, FILE_APPEND);
?>Содержимое файла log.txt после нескольких вызовов: 2023-10-26 10:15:00 - событие 2023-10-26 10:16:12 - событие 2023-10-26 10:17:05 - событие
<?php
$file = 'counter.txt';
// Прочитать текущее значение, увеличить и записать безопасно
$current = (int)@file_get_contents($file);
$current++;
file_put_contents($file, $current, LOCK_EX);
?>Содержимое counter.txt обновлено атомарно, даже при одновременных запросах.
<?php
$file = 'lines.txt';
$lines = ["Строка 1", "Строка 2", "Строка 3"];
$bytes = file_put_contents($file, $lines);
echo "Записано: $bytes байт";
?>Содержимое lines.txt: Строка 1Строка 2Строка 3
Классический способ работы с файлами. Предпочтительнее, когда требуется многократная запись в открытый файл или необходим более тонкий контроль над процессом.
<?php
$handle = fopen('file.txt', 'w');
fwrite($handle, 'Часть данных');
fwrite($handle, 'Еще данные');
fclose($handle);
?>Объектно-ориентированный интерфейс для работы с файлами. Удобен для построчного чтения и записи, а также для более сложных операций.
<?php
$file = new SplFileObject('data.txt', 'w');
$file->fwrite('Запись через SplFileObject');
?>File put contents в Python
Используется функция open() с режимом 'w' (перезапись) или 'a' (добавление). В отличие от PHP, в Python принято использовать менеджер контекста with.
# Запись
with open('test.txt', 'w', encoding='utf-8') as f:
f.write('Текст для записи')
# Добавление в конец
with open('log.txt', 'a', encoding='utf-8') as f:
f.write('новая запись\n')Используются асинхронные методы модуля fs: fs.writeFile (перезапись) и fs.appendFile (добавление).
const fs = require('fs').promises;
// Перезапись файла (асинхронно)
async function writeFileExample() {
try {
await fs.writeFile('file.txt', 'Содержимое', 'utf8');
} catch (err) {
console.error(err);
}
}
// Добавление в конец файла
await fs.appendFile('log.txt', 'новая строка\n');Перенаправление вывода с помощью > (перезапись) и >> (добавление).
# Перезапись файла
echo "Содержимое" > file.txt
# Добавление в конец файла
echo "Новая строка" >> log.txt<?php
// Попытка записи в системную директорию без прав
$result = file_put_contents('/etc/test.txt', 'данные');
if ($result === false) {
echo "Ошибка записи. Проверьте права доступа.";
}
?>Ошибка записи. Проверьте права доступа. (Возвращено false)
<?php
// Путь содержит несуществующие директории
file_put_contents('/несуществующий/путь/file.txt', 'данные');
?>Warning: file_put_contents(/несуществующий/путь/file.txt): Failed to open stream: No such file or directory
<?php
// Файл может отсутствовать, но FILE_APPEND не создает его автоматически во всех версиях PHP
$result = file_put_contents('new_log.txt', 'запись', FILE_APPEND);
// В PHP 8 файл будет создан, в более ранних версиях может возникнуть ошибка.
?>Рекомендуется сначала проверить существование файла или использовать флаги FILE_APPEND | LOCK_EX.
- PHP 8.0: Функция теперь создает файл при использовании флага
FILE_APPEND, если файл не существует. Ранее в этой ситуации могла возникать ошибка. - PHP 7.1: Добавлена поддержка передачи массива в параметр
data. Элементы массива записываются без разделителей между ними.
<?php
// Создание контекста для записи данных POST на удаленный URL
$url = 'https://httpbin.org/post';
$data = http_build_query(['key' => 'value', 'test' => 'data']);
$options = [
'http' => [
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => $data,
],
];
$context = stream_context_create($options);
// Здесь file_put_contents отправит POST-запрос
$result = file_put_contents($url, false, 0, $context);
echo "Получено байт: $result";
?><?php
$file = 'config.lock';
// Попытка создать файл, только если его нет (используем x в режиме fopen через контекст)
$context = stream_context_create([
'ftp' => ['overwrite' => false] // Для FTP, для локальных файлов семантика может отличаться
]);
// Лучший способ - использовать LOCK_EX и проверку через file_exists
if (!file_exists($file)) {
$written = file_put_contents($file, 'Lock file', LOCK_EX);
if ($written) {
echo "Файл блокировки создан";
}
} else {
echo "Файл уже существует";
}
?><?php
function writeLog($message, $file = 'app.log') {
$date = date('Y-m-d H:i:s');
$entry = "[$date] $message\n";
// Если файл больше 1 МБ, создаем новый с меткой времени
if (file_exists($file) && filesize($file) > 1024 * 1024) {
rename($file, $file . '.' . time());
}
file_put_contents($file, $entry, FILE_APPEND | LOCK_EX);
}
writeLog('Пользователь вошел в систему');
writeLog('Ошибка при обработке запроса');
?><?php
$data = [
'users' => ['Алексей', 'Мария', 'Иван'],
'settings' => ['theme' => 'dark', 'lang' => 'ru'],
'last_update' => time()
];
// Сериализация и сохранение
$serialized = serialize($data);
file_put_contents('cache.data', $serialized, LOCK_EX);
// Чтение и десериализация
$restored = unserialize(file_get_contents('cache.data'));
print_r($restored['users']);
?>Array
(
[0] => Алексей
[1] => Мария
[2] => Иван
)<?php
// Захват вывода скрипта в файл
ob_start();
echo "<h1>Отчет</h1>\n";
print_r([1, 2, 3, 4, 5]);
$htmlContent = ob_get_contents();
ob_end_clean();
file_put_contents('report.html', $htmlContent);
?><?php
$config = [
'site' => [
'name' => 'Мой сайт',
'url' => 'https://example.com',
'enabled' => true
],
'database' => [
'host' => 'localhost',
'user' => 'admin'
]
];
// JSON_PRETTY_PRINT для читаемого формата
$json = json_encode($config, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
file_put_contents('config.json', $json);
?>