КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

Получение расширения файла

При загрузке файлов на сервер, а также в некоторых других случаях необходимо узнать расширение файлов, чтобы быть уверенным, что нам не попытаюся загрузить скрипты и прочую дрянь. Для этого существует много способов. Можно проверять на mime-тип загружаемого файла:
switch($_FILES['filename']['type']){
  case 'image/jpeg': $ext = 'jpg'; break;
  case 'image/gif': $ext = 'gif'; break;
  case 'image/png' : $ext = 'png'; break;
  case 'image/tiff': $ext = 'tif'; break;
  default: $ext = ''; break;
}
Но недавно в книге прочитал, что этот способ можно легко обойти. Поэтому:
№1 mb_strrpos() возвращает позицию последней точки в строке, а mb_substr() возвращает часть строки, начиная с следующего заточкой символа. В данном случае получим js:
// устанавливаем внутреннюю кодировку скрипта:
mb_internal_encoding('utf-8');
$name = "jquery-1.11.1.min.js";
$ext  =  mb_substr ($name, mb_strrpos($name, '.')+1);
echo $ext;
№2 Функция explode() преобразует имя файла в массив строк, разбивая его по указанному разделителю (точке). Для того чтобы гарантированно вернуть именно расширение (в имени файла может быть несколько точек) функция end() возвращает последний элемент массива:
function getExt($filename) {
  return end(explode(".", $filename));
}
№3 Функция pathinfo() возвращает ассоциативный массив, содержащий информацию о нужном нам файле. Массив содержит элементы dirname, basename и extension — в них вся нужная информация:
function getExt2($filename){
  $path_info = pathinfo($filename);
  return $path_info['extension'];
}
№4 Работает следующим образом: strrchr() возвращает участок строки, следующий за указанным параметром (точкой в нашем случае), после чего substr() отрезает первый символ — точку.
function getExt3($filename){
  return substr(strrchr($fileName, '.'), 1);
}
И наконец №5 Данный способ очень похож на первый. array_pop() — выталкивает элемент в конце массива, end() — устанавливает внутренний указатель массива на последний элемент.
function getExt4($filename){
  return array_pop(explode(".", $filename));
}
А теперь о том, как по-нормальному делается проверка MIME-типа файла при загрузке не сервер

  /**
  * проверка mime-типа файла
  * @param string $filename
  * @param string $pattern
  * @param string $message
  * 
  * @return $message, если не соответствует регулярному выражению $pattern, иначе пустую строку
  */
  public function check_mimeType($filename, $pattern, $message){
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    // возвращает mime-тип
    $mime = finfo_file($finfo, $filename);
    finfo_close($finfo);
    if(!preg_match($pattern, $mime)){
        return $message;
    } else return '';
  }
  
  // получение mime-типа файла
  public function get_mimeType($filename){
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    // возвращает mime-тип
    $mime = finfo_file($finfo, $filename);
    finfo_close($finfo);
    return $mime;
  }

2015.06.02 121

Только у программиста фразы "Все повисло" и "Все встало" означают одно и то же.
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


    Яндекс.Метрика Яндекс.Метрика