<?php $finfo = new finfo(); $fileinfo = $finfo->file($_FILES["fileToUpload"]["tmp_name"], FILEINFO_MIME); switch($fileinfo) { case "image/gif": case "image/jpeg": case "image/png": move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "upload/" . $_FILES["fileToUpload"]["name"]); echo "Your file has successfully been uploaded, and is awaiting moderator approval for points." . "<html><br><a href='uploadfile.php'>Upload more.</a>"; break; default: echo "Files must be either JPEG, GIF, or PNG and less than 10,000 kb"; break; } ?>
мне недавно было доведено до моего сведения, что здесь нет ничего плохого, это просто не работает, потому что мои серверные php только в 5.2 лемме знают, если вы, ребята, можете найти способ заставить его работать с помощью MIME
pecl install fileinfo
?
На серверах Linux вы можете лениться и использовать:
$type = exec("file -iL " . escapeshellcmd($fn) . " 2>/dev/null"); $type = trim(strtok(substr(strrchr($type, ":"), 1), ";"));
mime_content_type
может по-прежнему работать на вас. Хотя теперь он находится в разделе fileinfo
в руководстве, он существовал до того, как fileinfo
был внесен в ядро PHP.
Обратите внимание, что может потребоваться небольшая конфигурация, если ваш хост переместил файл mime.types
Apache из нормального местоположения, как mime.types
в комментариях на этой странице.
Примечание. Я знаю, что это напрямую не отвечает на вопрос о версии PHP. Тем не менее, я нашел этот пост, пытаясь решить мою проблему, и поэтому он может быть полезен кому-то в будущем.
В последнее время я слишком часто борется с библиотекой Fileinfo
, пытаясь проверить файлы MP3. Я понял, что есть некоторые известные проблемы с файлами Fileinfo
и MP3, даже если вы правильно настроили файл магической базы данных для своей среды.
Если Fileinfo
не может определить тип mime MP3, он может вернуть application/octet-stream
. Не очень полезно при проверке файла.
В качестве альтернативы я начал использовать следующую системную команду. Это очень похоже на предложение @ mario, и до сих пор кажется более надежным, чем Fileinfo
.
$path = 'path/to/your/mp3/file.mp3'; $mime = exec('file -b --mime-type ' . $path);
Я тестировал это на Ubuntu 10.04 и OSX Mountain Lion, поэтому я предполагаю, что он работает в большинстве сред Unix. Я считаю, что есть и некоторые порты Windows.
По правде говоря, я не совсем уверен, насколько безопасен или надежный этот метод, но я видел его несколько раз здесь, на Stackoverflow. Если у кого-то есть больше информации, пожалуйста, поделитесь!