Tmpfile: примеры (PHP)

Временные файлы через tmpfile: полный обзор с примерами
Раздел: Работа с файлами
tmpfile(void): resource|false

Функция tmpfile в PHP

Функция tmpfile() в языке программирования PHP создает временный файл с уникальным именем в режиме чтения и записи (w+). Этот файл автоматически удаляется при закрытии с помощью fclose() или при завершении выполнения скрипта.

Назначение и применение

Основное использование функции связано с необходимостью временного хранения данных, которые не должны сохраняться после завершения работы скрипта. Это полезно для обработки промежуточных результатов, буферизации вывода или работы с библиотеками, требующими файлового интерфейса.

Аргументы и возвращаемое значение

Функция не принимает параметров. Возвращает указатель на файловый ресурс в случае успеха или false при неудаче.

Примеры использования функции tmpfile

Базовый пример

Создание временного файла и запись данных:

$tempFile = tmpfile();
fwrite($tempFile, 'Временные данные');
rewind($tempFile);
echo fread($tempFile, 1024);
fclose($tempFile);
Временные данные
Проверка на ошибки
if ($tmp = tmpfile()) {
    fwrite($tmp, 'Успешная запись');
    rewind($tmp);
    echo fgets($tmp);
    fclose($tmp);
} else {
    echo 'Ошибка создания временного файла';
}
Успешная запись

Альтернативные функции в PHP

В PHP существуют другие функции для работы с временными данными.

tempnam()

Создает файл с уникальным именем в указанной директории. Требует ручного удаления.

$tempName = tempnam(sys_get_temp_dir(), 'prefix_');
file_put_contents($tempName, 'Содержимое');
unlink($tempName);
php://temp

Потоковый враппер, позволяющий использовать временную память или файл при превышении лимита.

$handle = fopen('php://temp', 'r+');
fwrite($handle, 'Данные в поток');

Аналоги в других языках программирования

Tmpfile в Python

Модуль tempfile предоставляет функцию TemporaryFile.

from tempfile import TemporaryFile
with TemporaryFile(mode='w+') as tmp:
    tmp.write('Временные данные')
    tmp.seek(0)
    print(tmp.read())
Временные данные
JavaScript (Node.js)

Модуль fs предоставляет createWriteStream, но аналога tmpfile нет.

const fs = require('fs');
const path = require('path');
const tmpPath = path.join('/tmp', `temp-${Date.now()}`);
fs.writeFileSync(tmpPath, 'Временный контент');
fs.unlinkSync(tmpPath);

Типичные ошибки

Использование закрытого ресурса
$tmp = tmpfile();
fclose($tmp);
fwrite($tmp, 'Запись после закрытия'); // Предупреждение
Warning: fwrite(): supplied resource is not a valid stream resource
Предположение о доступности файла после скрипта
$tmp = tmpfile();
fwrite($tmp, 'Данные');
// Файл автоматически удалится, сохранение невозможно

Изменения в версиях PHP

В PHP 8.0 не было значительных изменений функции tmpfile. В PHP 7.3 улучшена обработка ошибок файловой системы. Функция сохраняет стабильное поведение с ранних версий.

Расширенные примеры

Обработка CSV через временный файл
Пример php
$tmp = tmpfile();
fputcsv($tmp, ['Имя', 'Возраст']);
fputcsv($tmp, ['Анна', 28]);
rewind($tmp);
while (($row = fgetcsv($tmp)) !== false) {
    print_r($row);
}
fclose($tmp);
Array
(
    [0] => Имя
    [1] => Возраст
)
Array
(
    [0] => Анна
    [1] => 28
)
Использование с cURL
Пример php
$tmp = tmpfile();
fwrite($tmp, file_get_contents('https://example.com/image.jpg'));
rewind($tmp);
$info = getimagesizefromstring(stream_get_contents($tmp));
print_r($info);
fclose($tmp);
Буферизация вывода
Пример php
ob_start();
echo 'Буферизованный вывод';
$content = ob_get_clean();
$tmp = tmpfile();
fwrite($tmp, $content);
rewind($tmp);
echo 'Из временного файла: ' . fread($tmp, 1024);
Из временного файла: Буферизованный вывод

PHP tmpfile function comments

En
Tmpfile Creates a temporary file