почему при извлечении данных файла с помощью JInputFiles иногда получается пустой массив?

почему при извлечении данных файла с помощью JInputFiles иногда получается пустой массив?

26.08.2019 04:14:38 Просмотров 45 Источник

Я занимаюсь разработкой задачи, которая состоит из загрузки файлов, в этом контексте я определил, что в некоторых случаях вызов на $files = $application->input-> files->get('files', [], 'ARRAY'); возвращает пустой массив, а $_FILES суперглобальная содержит файл информации.

Я показываю содержимое переменных в формате JSON

$_АРХИВ

{
    "files": {
        "name": ["test.zip"],
        "type": ["application/zip"],
        "tmp_name": ["/tmp/phpwiA9ch"],
        "error": [0],
        "size": [2993308]
    }
}

$архив

[]

Я не смог определить причину, я изначально определил ее при попытке загрузить файл pdf размером 32 МБ, я думал, что это проблема с размером файла, но затем я определил, что это происходит с файлом zip размером 3 МБ, я упоминаю здесь, что мне удалось загрузить другие zip-файлы

Я разделяю Настройки Мультимедиа

Юридическое расширения (типы файлов): зип БМП, КШМ, DOC, в формате GIF, формат ICO, jpg, формате JPEG, ОДГ, тонны ОРВ, odt, в формате PDF в сети, ПНГ, формате ppt, TXT и файл xcf, XLS, а также ЗИП БМП, КШМ, DOC , в формате GIF, формат ICO, jpg, формате JPEG, ОДГ, тонны ОРВ, файлы odt, PDF и PNG, в формате ppt, TXT и файл xcf, XLS и

Максимальный размер (в МБ): 100 МБ

Юридическое типы MIME-тип: изображение / JPEG изображение / GIF, изображение / PNG, изображения / БМП, приложение / MSWord, применение / Excel, приложения / PDF, приложение / PowerPoint, текст / равнина, применение / х-молнии

Решение, которое я думаю, было бы сделать вызов $_FILES, если содержимое $filesпусто. Но мне интересно узнать причину этой ошибки

Вот код, который я пытаюсь выполнить

public function uploadAttachments()
{
    $application = JFactory::getApplication();

    $files = $application->input->files->get('files', [], 'ARRAY'); // Here some times is empty

    $helper = new Helper();

    $response = $helper->uploadAttachments($files);

    header('content-type: application/json; charset=utf-8');
    echo json_encode($response);
    $application->close();
}
У вопроса есть решение - Посмотреть?

Ответы - почему при извлечении данных файла с помощью JInputFiles иногда получается пустой массив? / why when retrieving file data using JInputFiles sometimes get an empty array?

Является ответом!
user615274

26.08.2019 06:44:04

Основанием для получения пустой массив при вызове $application->input->files-> get('files', [], 'ARRAY'); - то, что get метод JInputFiles класс это проверить, если файл является безопасным, проверка осуществляется в статическом методе isSafeFile, после серии проверок, если какое-то условие не проходит, то ложным будет вернуться, в consecuense метод get возвращает значение по умолчанию в моем случае пустой массив.

В случае файла, в котором я тестировал, это связано с тем, что он идентифицирует расширение pl, которое отмечено как: "это подозрительные текстовые файлы, которые могут иметь исполняемый файл"

JInputFile класс

https://stackoverflow.com/questions/57658645/why-when-retrieving-file-data-using-jinputfiles-sometimes-get-an-empty-array/57661062#comment102891551_57661062
Пожалуйста, примите ваш ответ, если этот вопрос будет решен к вашему удовлетворению. Это большое открытие обмена. Вы также можете опубликовать этот вопрос и ответ на Joomla Stack Exchange.
Закрыть X