поиск расширения файла, загружаемого с помощью php

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

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

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

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

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

Когда у вас есть тип файла mime, это всего лишь вопрос сопоставления (например, 'image / png' => 'png').

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

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

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

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

Предполагая, что вы

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

Ты можешь сделать

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

или

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

Я использовал 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 } 
 $extension = end(explode(".",$_FILES['foo']['name'])); 

Хай

  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 '|| $ типа =='. '|| PNG $ типа =='.' GIF || $ type == '. JPG' || $ type == '. PNG' || $ type == '. JPEG') {

//ваш код…………. }