Как определить расширение файла при загрузке php? - PullRequest
0 голосов
/ 22 февраля 2012

Я читал кое-что о MIME и finfo(), но я не понял!

Также я попробовал это:

if ($_FILES["uploadedFile"]["type"] == "text/docx"/*or == document/docx*/)
    echo "1";

Очевидно, что это не сработает. Когда я echo $_FILES['uploadedFile']['type'];, тогда я увидел это для текстового документа (Мой сервер Linux):

application/vnd.openxmlformats-officedocument.wordprocessingml.document

Так что я должен использовать:?

    if ($_FILES["uploadedFile"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")

Что такое простой и надежный способ найти расширение файла (не только изображения)? (Я имею в виду использование некоторых переменных, которые не заполняются на стороне клиента)

Ответы [ 3 ]

3 голосов
/ 22 февраля 2012

Если вы используете php 5.3, вы можете получить true mime-type:

$finfo = finfo_open();
$file = $_FILES["uploadedFile"];
finfo_file($finfo, $file, FILEINFO_MIME_TYPE);
finfo_close($finfo);

Подробнее:

2 голосов
/ 22 февраля 2012

Как насчет

$file = $_FILES['uploadedFile'['name'];
$pathparts = pathinfo($file);
$ext = $pathparts['extension'];

Это даст вам фактическое расширение файла для работы.

0 голосов
/ 22 февраля 2012

Лучший способ определить тип файла - изучить первые несколько байтов файла, называемых «магическими байтами». Магические байты - это, по сути, сигнатуры, длина которых варьируется от 2 до 40 байтов в заголовках файлов или в конце файла.

Ваша лучшая ставка - расширение PECL, которое называется Fileinfo .

Начиная с PHP 5.3 , Fileinfo поставляется вместе с основным дистрибутивом и по умолчанию включена

// in PHP 4 :
$fhandle = finfo_open(FILEINFO_MIME);
$mime_type = finfo_file($fhandle,$file); // e.g. gives for example "image/jpeg" for a jpeg file

// in PHP 5 you can do :

$file_info = new finfo(FILEINFO_MIME);  // object oriented approach!
$mime_type = $file_info->buffer(file_get_contents($file)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...