Расширение файла "rtf" исчезает во время выполнения сценария проверки mime / extension с использованием PHP-класса "finfo" - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать перекрестную проверку загруженных файлов через phpmailer, используя значения файлов "extension X mime", система работает практически со всеми файлами, которые мне нужны, но исключительно с файлами .rtf сценарий не выполняется. т работает.

Расширение просто исчезает, скрипт не может получить это, если файл .rtf. Я использую этот скрипт: https://stackoverflow.com/a/33349901/4623271 с некоторыми изменениями.

Ниже в коде указана переменная $ext, где я могу получить расширение любых файлов, разрешенных для проверки, кроме файлов .rtf, когда файл представляет собой .rtf, переменная становится явно пустой.

Я пытался использовать $ext = end(explode(".", $_FILES["uploadedFile"]["name"]));, но таким же образом, когда файл .rtf, переменная становится пустой.

    // mime verification
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    if (false === $ext = array_search(
        $finfo->file($_FILES['uploadedFile']['tmp_name']),
        array(
            'doc' => 'application/msword',
            'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'rtf' => 'application/msword',
            'odt' => 'application/vnd.oasis.opendocument.text',
            'txt' => 'text/plain',
            'pdf' => 'application/pdf',
        ),
        true
    )) {
         $errorMsg .= "<br> Please, watch that the formats allowed are: \"doc\", \"docx\", \"rtf\", \"odt\", \"txt\", \"pdf\"' ";
    }

За то время, которое вы потратили на чтение этого, спасибо.

1 Ответ

0 голосов
/ 03 апреля 2019

Я обнаружил, что проблема в значении MIME, которое я использовал в массиве для проверки файла .rtf.

Тип MIME, прочитанный $finfo = new finfo(FILEINFO_MIME_TYPE);, не является обычным типом MIME, найденным в сети.таблицы с такой информацией и которую я использовал для создания исходного массива.

После поиска помощи в бразильской группе PHP Telegram я получил подсказку для анализа значения переменной $finfo.

Когда я применил var_dump ($finfo->file($_FILES['uploadedFile']['tmp_name']));, я обнаружил, что для FILEINFO_MIME_TYPE MIME .rtf файлов является: text/rtf, а не application/rtf, что, как я сказал выше, является наиболее распространенным вариантом типа MIME.в .rtf файлов.

Из-за этого произошла ошибка проверки, так как сценарий ожидал text/rtf связать с .rtf файлом.

После того, как я изменил значение ключа для text/rtf вместо application/msword или application/rtf, скрипт работал как положено.

Теперь я отправляю вложения с проверкой MIME с помощью phpmailer.

Спасибо всем, кто пытался помочь в некоторыхспособ.

...