Tmpfile: примеры (PHP)
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 существуют другие функции для работы с временными данными.
Создает файл с уникальным именем в указанной директории. Требует ручного удаления.
$tempName = tempnam(sys_get_temp_dir(), 'prefix_');
file_put_contents($tempName, 'Содержимое');
unlink($tempName);Потоковый враппер, позволяющий использовать временную память или файл при превышении лимита.
$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())Временные данные
Модуль 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 улучшена обработка ошибок файловой системы. Функция сохраняет стабильное поведение с ранних версий.
Расширенные примеры
$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
)$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);ob_start();
echo 'Буферизованный вывод';
$content = ob_get_clean();
$tmp = tmpfile();
fwrite($tmp, $content);
rewind($tmp);
echo 'Из временного файла: ' . fread($tmp, 1024);Из временного файла: Буферизованный вывод