2015-05-19 1 views
0

У меня есть странная проблема: когда я пытаюсь загрузить разные файлы, некоторые из них распознаются правильно, но некоторые из них не установлены и установлены как application/octet-stream, когда вы проверяете их тип $_FILES['file_1']['type']Некоторые файлы заданы как тип «application/octet-stream»

Debug Objects: png 
Debug Objects: image/png 
Debug Objects: php 
Debug Objects: application/octet-stream 
Debug Objects: rar 
Debug Objects: application/octet-stream 
Debug Objects: psd 
Debug Objects: application/octet-stream 

Я связался с моим хостинг компании, они сказали мне его не ошибка на их стороне, и что это может быть связано с CloudFlare, но я никогда не имел такой проблемы раньше.

Я знаю, что RAR имеет application/octet-stream как один из возможных типов mime, но не PHP или PSD.

Те типы для PSD:

application/x-photoshop 
image/vnd.adobe.photoshop 

И это для PHP:

application/x-httpd-php 
application/php 
application/x-php 
text/php 
text/x-php 
application/x-httpd-php-source 

ли кто-то есть идея, почему его это делать? Я попробовал его в IE, FireFox, Chrome и Opera. Случается во всех этих браузерах.

Есть ли лучший способ проверки типов? Поскольку те, которые я проверяю, отправляются браузером, который может быть подделан (я также проверяю расширения для большей безопасности). Я знаю, что есть способ сделать это с помощью java, но я бы хотел использовать PHP и сделать это на стороне сервера.

Спасибо.

+0

Я думаю, что его из Chorme только, есть у попытался с FF, чтобы проверить тип MIME. –

+0

@SudipPal Пробовал IE, Chrome, FF, Opera. Бывает во всех них. – MiChAeLoKGB

+0

Непонятно, что вы спрашиваете. Какие файлы распознаются как, где, когда вы загружаете то, от кого до кого? – deceze

ответ

2

Вы должны проверить тип mime на стороне сервера с помощью finfo_file или finfo_buffer.

<?php 
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
echo finfo_file($finfo, $filename); 
+0

Это то, что я хотел.Поскольку я действительно установил что-либо на моем сервере, было сложно найти то, что уже было установлено там, это решение для меня :) – MiChAeLoKGB

0

Улучшение на @take ответа, я использую file_get_contents() а

$finfo = new finfo(FILEINFO_MIME); 
print_r($finfo->buffer(file_get_contents($filename)));