FrankenPHP\UploadedFile
(True Async 0.6+)
Объекты UploadedFile возвращаются методом Request::getUploadedFiles(). Каждый объект представляет один загруженный файл и предоставляет доступ к его метаданным и метод для перемещения в постоянное хранилище.
Несколько файлов, загруженных под одним именем поля, возвращаются как массив объектов UploadedFile.
Обзор класса
namespace FrankenPHP;
class UploadedFile
{
public function getName(): string;
public function getType(): string;
public function getSize(): int;
public function getTmpName(): string;
public function getError(): int;
public function moveTo(string $path): bool;
}Методы
getName
public UploadedFile::getName(): stringВозвращает оригинальное имя файла, отправленное клиентом.
Примечание: никогда не доверяйте оригинальному имени файла для сохранения. Всегда очищайте или генерируйте безопасное имя перед сохранением.
getType
public UploadedFile::getType(): stringВозвращает MIME-тип, указанный клиентом (например, image/png).
getSize
public UploadedFile::getSize(): intВозвращает размер файла в байтах.
getTmpName
public UploadedFile::getTmpName(): stringВозвращает путь к временному файлу на диске.
getError
public UploadedFile::getError(): intВозвращает код ошибки загрузки. UPLOAD_ERR_OK (0) означает успех. Смотрите константы ошибок загрузки PHP.
moveTo
public UploadedFile::moveTo(string $path): boolПеремещает загруженный файл в указанный путь назначения. Возвращает true при успехе.
Примеры
Пример #1 Обработка загрузки одного файла
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
HttpServer::onRequest(function (Request $request, Response $response): void {
$files = $request->getUploadedFiles();
if (isset($files['avatar'])) {
$file = $files['avatar'];
if ($file->getError() === UPLOAD_ERR_OK) {
$safeName = bin2hex(random_bytes(16)) . '.png';
$file->moveTo('/uploads/' . $safeName);
$response->setStatus(200);
$response->write("Загружено: {$file->getName()} ({$file->getSize()} байт)");
} else {
$response->setStatus(400);
$response->write("Код ошибки загрузки: {$file->getError()}");
}
} else {
$response->setStatus(400);
$response->write('Файл не загружен');
}
$response->end();
});Пример #2 Обработка нескольких файлов
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
HttpServer::onRequest(function (Request $request, Response $response): void {
$files = $request->getUploadedFiles();
$saved = [];
// Несколько файлов, загруженных как photos[]
$photos = $files['photos'] ?? [];
if (!is_array($photos)) {
$photos = [$photos];
}
foreach ($photos as $file) {
if ($file->getError() === UPLOAD_ERR_OK) {
$dest = '/uploads/' . bin2hex(random_bytes(8)) . '_' . $file->getName();
$file->moveTo($dest);
$saved[] = $file->getName();
}
}
$response->setStatus(200);
$response->setHeader('Content-Type', 'application/json');
$response->write(json_encode(['saved' => $saved]));
$response->end();
});Смотрите также
- FrankenPHP\Request -- Чтение данных запроса
- FrankenPHP\Response -- Формирование и отправка ответов
- Руководство по FrankenPHP -- Установка, конфигурация и развёртывание