2010-06-10 6 views
0

Прямо сейчас у меня есть функция, которая берет мой загруженный файл, проверяет расширение, и если он соответствует массиву допустимых расширений, он обрабатывается. Это импортер списка контактов.Ограничить допустимые типы загрузки файлов PHP

Что мне нужно выяснить, так это убедиться, что файл (в данном случае .csv) на самом деле то, что он говорит (например, не файл excel, который только что переименован в .csv).

Наши серверы работают PHP 5.2.13

Вот текущая функция проверки я

public static function validateExtension($file_name,$ext_array) { 
    $extension = strtolower(strrchr($file_name,".")); 
    $valid_extension="FALSE"; 

    if (!$file_name) { 
     return false; 
    } else { 
     if (!$ext_array) { 
      return true; 
     } else { 
      foreach ($ext_array as $value) { 
       $first_char = substr($value,0,1); 

       if ($first_char <> ".") { 
        $extensions[] = ".".strtolower($value); 
       } 
       else { 
        $extensions[] = strtolower($value); 
       } 
      } 

      foreach ($extensions as $value) { 
       if ($value == $extension) { 
        $valid_extension = "TRUE"; 
       } 
      } 

      if ($valid_extension==="TRUE") { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } 

}

EDIT: Я сейчас пытаюсь сделать

exec('file -ir '.$myFile) 

Когда я запускаю эту команду в терминале, мне дают полезный ответ. Когда я запускаю ту же команду через php, мне дают что-то другое. Любые идеи почему? Я пробовал это с помощью exec, passthru, shell_exec. И сервер не работает в безопасном режиме.

+0

читатель php excel может помочь вам решить, является ли загруженный файл файлом .xls или нет (PHP-ExcelReader @ http://sourceforge.net/projects/phpexcelreader/files/) – Andreas

ответ

2

Забудьте о проверке расширения, он недостаточно надежный.

Кроме того, я думаю, что традиционные MIME магия нюхают потерпит неудачу здесь, потому что не использовать заголовок (Это только мое предположение, однако.)

В данном конкретном случае, я бы сказал, что это возможно, чтобы взять быстро заглянуть в содержимое, например, прочитать первые десять строк или около того. Если они все не больше, чем x байтов, и каждая строка содержит одинаковое количество точек с запятой (или независимо от того, какой ваш синтаксический анализатор CSV принимает как разделители), это CSV-файл.

Смежные вопросы