Перехват имени загруженного файла в Fat Free Framework

#php #file-upload #slug #fat-free-framework

#php #загрузка файла #slug #fat-free-framework

Вопрос:

Мой php-скрипт должен обрабатывать загрузку имени файла, отличного от slug, когда, например, пользователь пытается загрузить файл «Имя на pycckom.jpg «. Некоторые методы неправильно обрабатывают его, поэтому я использую:

 $overwrite = true;
$slug = true;
Web::instance()->receive(NULL,$overwrite,$slug);
  

Итак, я получаю «imja-na-russkom.jpg «файл на сервере. Проблема в том, что мне нужно перехват этого имени файла для DB, для чего я попробовал это:

 $filename = Web::instance()->Slug($_FILES['userfile']['name'];
  

Которое возвращает «imja-na-russkom-jpg» — не имя, используемое в файловой системе (не точка, а тире перед расширением).

Итак, мой вопрос таков: есть ли способ перехвата имени, используемого в Web::receive() или, если нет, есть ли обходной путь для его получения с помощью F3? Спасибо.

Ответ №1:

Хорошо, с помощью подсказки ikkez я понял это:

 $a = Web::instance()->receive(NULL,true,true);
$name = array_keys($a);
$name = pathinfo($name['0'], PATHINFO_BASENAME);
  

Здесь мы загружаем файл на сервер и сохраняем его имя в переменной $name. Вы можете пропустить последнюю строку и использовать

 $name = $name['0'];
  

если вы хотите сохранить полный путь к вашему загруженному файлу.

Комментарии:

1. Что произойдет, если ваш файл был загружен неправильно? переменная $name по-прежнему возвращает имя, и вы сохраните имя файла, который не существует на сервере. Я думаю, вам также следует проверить логическое значение.

Ответ №2:

функция Web::instance()->receive возвращает массив файлов, которые были загружены. вы увидите заблокированное имя в ключах массива. проверьте пример на http://fatfreeframework.com/web#receive