Метод tempnam
Метод tempnam класса Filesystem создаёт временный файл
с уникальным именем. Первым параметром передаётся директория,
в которой нужно создать файл. Вторым параметром передаётся
префикс имени файла. Метод возвращает полный путь к созданному
файлу. Если директория не существует или недоступна для записи,
метод выбрасывает исключение IOException.
В отличие от встроенной функции PHP tempnam, метод класса
Filesystem проверяет, что директория действительно существует,
и выбрасывает понятное исключение при ошибке. Это упрощает
отладку и делает код более предсказуемым.
Синтаксис
public function tempnam(string $dir, string $prefix): string
Пример
Давайте создадим временный файл в директории '/tmp'
с префиксом 'abcde':
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFilesystemFilesystem;
use SymfonyComponentFilesystemExceptionIOException;
class ArticleController extends AbstractController
{
public function index(): Response
{
$fs = new Filesystem();
try {
$path = $fs->tempnam('/tmp', 'abcde');
echo $path;
} catch (IOException $e) {
echo $e->getMessage();
}
return new Response();
}
}
?>
Результат выполнения кода:
"/tmp/abcde1a2b3c"
Пример
Давайте создадим временный файл в директории проекта
'var/tmp' и запишем в него данные:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFilesystemFilesystem;
use SymfonyComponentFilesystemExceptionIOException;
class ArticleController extends AbstractController
{
public function index(): Response
{
$fs = new Filesystem();
try {
$path = $fs->tempnam('var/tmp', 'user');
$fs->dumpFile($path, 'hello');
echo $fs->readFile($path);
} catch (IOException $e) {
echo $e->getMessage();
}
return new Response();
}
}
?>
Результат выполнения кода:
"hello"
Пример
Давайте обработаем ситуацию, когда указанная директория не существует:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentFilesystemFilesystem;
use SymfonyComponentFilesystemExceptionIOException;
class ArticleController extends AbstractController
{
public function index(): Response
{
$fs = new Filesystem();
try {
$path = $fs->tempnam('/nonexistent/path', 'article');
echo $path;
} catch (IOException $e) {
echo $e->getMessage();
}
return new Response();
}
}
?>
Результат выполнения кода:
"Unable to create a temporary file in "/nonexistent/path"."
Смотрите также
-
класс
Filesystem,
который предоставляет методы для работы с файловой системой -
метод
dumpFile,
который записывает данные в файл -
метод
readFile,
который читает содержимое файла -
метод
remove,
который удаляет файлы и директории