#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