2013-11-11 3 views
2

Я загружаю изображения с Android-приложения на свой сервер. Приложение использует намерение камеры Android и загружать через PHP-скрипт в порядке.PHP-образ неправильный mimetype

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

Я использую сервер Slackware Linux Apache, и я пытаюсь этот код:

.... 
$finfo = finfo_open(FILEINFO_MIME, '/etc/httpd/magic'); 
.... 
fwrite($fp, finfo_file($finfo, "file.jpg")); 
.... 

Но я получаю «приложение/октет-поток; кодовый = двоичный» вместо «изображений/JPEG ; charset = binary ", который указан из файла -i file.jpg (команда оболочки).

В чем проблема?

ответ

2

Решено использовать $ finfo = finfo_open (FILEINFO_MIME); вместо другой. Я думаю, что волшебный файл по умолчанию - это не то же самое, что я указывал.

+0

Не забудьте принять ваше собственное решение. :-) – h2ooooooo

+0

Надеюсь, что так! Через 2 дня происходит много вещей LOL! – user1638466

-2

Попробуйте использовать функцию mime_content_type().

+1

* Эта функция устарела, поскольку расширение PECL Fileinfo предоставляет более функциональную функциональность (и многое другое). *. – h2ooooooo

+0

Да, вот почему я его не использую. Спасибо в любом случае – user1638466

+0

Функция mime_content_type() (которую я не хочу использовать) дает правильный вывод, так что же не так в моем коде? – user1638466

0

Как refered на www.php.net/manual/en/ref.fileinfo.php:

<?php 

function is_jpg($fullpathtoimage){ 
    if(file_exists($fullpathtoimage)){ 
     exec("/usr/bin/identify -format %m $fullpathtoimage",$out); 
     //using system() echos STDOUT automatically 
     if(!empty($out)){ 
      //identify returns an empty result to php 
      //if the file is not an image 

      if($out == 'JPEG'){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 

?> 
+0

ну, я бы не хотел использовать системные вызовы, но если нет другого пути, я думаю, что буду использовать «файл -i file_name.jpg» – user1638466

0

С другой стороны, если у вас есть права выполнения и хотите использовать «Hacky» решение, вы можете просто сделать то, что вы уже сделали (с использованием file -i path с shell_exec):

<?php 
    function shell_get_mime_type($path) { 
     if (is_readable($path)) { 
      $command = 'file -i "' . realpath($path) . '"'; 

      $shellOutput = trim(shell_exec($command)); 
      //eg. "nav_item.png: image/png; charset=binary" 

      if (!empty($shellOutput)) { 
       $colonPosition = strpos($shellOutput, ':'); 

       if ($colonPosition !== false) { 
        return rtrim(substr($shellOutput, $colonPosition + 1)); 
       } 

       return $shellOutput; 
      } 
     } 

     return false; 
    } 
?> 
Смежные вопросы