mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 08:45:44 +00:00
3.1 KiB
3.1 KiB
File — файлы
App\Helpers\File — операции с файлами: чтение/запись (в т.ч. атомарная), mime,
скачивание, кодировки, работа с именами.
use App\Helpers\File;
Чтение и запись
getContent($filename) — прочитать файл в строку.
setContent($filename, $content, $create_file = true, $append = false, $chmod = 0666)
Записать в файл (с созданием / дозаписью).
putAtomic($path, $content, $mode = 0664)
Атомарная запись: пишет во временный файл и делает rename — читатели никогда
не увидят «полу-записанный» файл. Используйте для кеша/конфигов.
File::putAtomic($cachePath, Json::payload($data));
$raw = File::getContent($path);
curlGetContent($url) / grab($url, $saveto, $dir)
Скачать содержимое по URL / сохранить файл по URL в каталог.
Имена и пути
| Метод | Пример |
|---|---|
ext($filename) |
'photo.JPG' → 'jpg' |
stripExt($filename) / name($filename) |
имя без расширения / имя файла |
slugName($name) |
безопасное имя (slug) |
uniqueName($dir, $base, $ext) |
не занятое имя в каталоге |
pathCorrection($path) |
нормализовать путь |
cutRootPath($path) / cutRootPathAll($string) |
убрать корневой путь для вывода |
$ext = File::ext($upload['name']); // 'pdf'
$name = File::uniqueName($dir, File::slugName($base), $ext);
Операции
File::exists($path);
File::copy($from, $to);
File::rename($from, $to);
File::delete($path);
File::writable($path);
File::lastChange($path); // mtime
File::scan($folder, $type); // список файлов (с фильтром по типу)
Отдача пользователю
download($file, $content_type = null, $filename = null, $kbps = 0)
Отдать на скачивание; $kbps > 0 — троттлинг скорости.
display($file, $content_type = null, $filename = null)
Показать inline (изображение/PDF в браузере).
File::download($path, null, 'Отчёт.xlsx');
MIME и кодировки
mime($file, $guess = true) — MIME-тип файла.
fileEncoding($path, $to = 'utf') — определить/привести кодировку.
Рецепты
Безопасная запись кеша:
File::putAtomic($cacheFile, $payload); // без «рваных» файлов при гонках
Приём загрузки с уникальным именем:
$ext = File::ext($_FILES['f']['name']);
$dest = $dir . '/' . File::uniqueName($dir, File::slugName($base), $ext);
move_uploaded_file($_FILES['f']['tmp_name'], $dest);