2009-07-15 2 views
1

Я использую PHP для веб-сайта. Я должен заставить пользователей загружать свои фотографии. Теперь фотографии могут быть в формате jpeg или png или gif. Моя проблема в том, что я идентифицирую пользователя с помощью уникального идентификатора пользователя, поэтому я хочу сохранить фотографии как: userid.jpg или userid.png и т. Д. Теперь, как узнать расширение файла, выбранного пользователем используя php?найти расширение файла, загружаемого с помощью php

ответ

6

я бы не стал полагайтесь на расширение файла, предоставляемое посетителем. Вместо этого спросите сам файл, что он (это все еще может быть подделано, но его менее вероятно, также вам не нужно задаваться вопросом, является ли расширение 3 или 4 символами (например, jpeg, jpg)). Попытка:

if ($_FILES['avatar']['type'] == "image/gif") 
if ($_FILES['avatar']['type'] == "image/jpeg") 
if ($_FILES['avatar']['type'] == "image/png") 

Они намного надежнее.

+3

Нет! Будьте очень осторожны, делая это. Убедитесь, что расширение имеет соответствующий тип (gif/jpg/png), а не что-то возможно исполняемое (например, .php). –

+1

Согласен, на самом деле ретроспективно, я бы проверял оба. – Gav

1

$filename = "harbl.jpg"; 
$fileinfo = pathinfo ($filename); 
echo($fileinfo['extension']);   // prints "jpg" 
1

Если у вас есть

<input type="file" name="foo"> 

Вы можете сделать

$info = pathinfo($_FILES['foo']['name']); 
$extension = $info['extension']; 
1
array_pop(explode(".", $_FILES["image"]["name"])) 

или

pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION) 
5

Вместо того, чтобы полагаться на расширение отправленного клиентом, вы можете также определить тип файла, используя fileinfo (PHP> = 5,3), или если вы используете более старую версию PHP, что-то вроде mime_content_type

После того, как вы имеете пантомимы тип файла, это просто вопрос отображения (например, «изображение/PNG» => «PNG»)

(Должно быть на самом деле лучше, по соображениям безопасности, если я правильно помню, , $ _FILES ['...'] ['type'] отправляется клиентом и может быть фальшивым)

2

Если вы используете хорошо обновленный сервер wi th PHP 5.3, вы должны заглянуть в новое расширение File Information. Он рассмотрит сами файлы и попытается определить тип mime, из которого вы можете получить расширение. Это более надежно, чем просмотр расширения или типа mime, предоставленного браузером, так как оба они могут быть подделаны.

Идеальное решение может использовать комбинацию всех этих методов для максимальной эффективности.

0

Я использовал Array в приложении, которое я создал недавно. И это работает очень хорошо.

$file_type = array('image/gif' => 'gif', 
        'image/jpeg' => 'jpg', 
        'image/pjpeg' => 'jpg', 
        'image/bmp' => 'jpg', 
        'image/png' => 'png'); 

if(array_key_exists(($_FILES['file_upload']['type']), $file_type){ 
    Your Function 

} 
0
$extension = end(explode(".",$_FILES['foo']['name'])); 
0

Hai

  You can check the image type easily in php.For example, you may have 

      <input type="file" name="image"> 


      $img_name=$_FILES["image"]["name"];     //name of the image 
      $img_tmpname=$_FILES["image"]["tmp_name"];   //temporary name 

      $len=strlen($img_name);       //length of image name 
      $dot=strpos($img_name,".");      //finding position of . 
      $type=substr($img_name,$dot,$len);  //finding string from . to end of string. 

      Then use if statement and check the file 

если ($ типа == 'GIF '|| $ типа =='. JPG '|| $ типа =='. JPEG' || $ type == '.png' || $ type == '.GIF' || $ type == '. JPG' || $ type == '. PNG' || $ type == '. JPEG') {

// код ............. }