Я использую PHP для веб-сайта. Я должен заставить пользователей загружать свои фотографии. Теперь фотографии могут быть в формате jpeg или png или gif. Моя проблема в том, что я идентифицирую пользователя с помощью уникального идентификатора пользователя, поэтому я хочу сохранить фотографии как: userid.jpg или userid.png и т. Д. Теперь, как узнать расширение файла, выбранного пользователем используя php?найти расширение файла, загружаемого с помощью php
ответ
я бы не стал полагайтесь на расширение файла, предоставляемое посетителем. Вместо этого спросите сам файл, что он (это все еще может быть подделано, но его менее вероятно, также вам не нужно задаваться вопросом, является ли расширение 3 или 4 символами (например, jpeg, jpg)). Попытка:
if ($_FILES['avatar']['type'] == "image/gif")
if ($_FILES['avatar']['type'] == "image/jpeg")
if ($_FILES['avatar']['type'] == "image/png")
Они намного надежнее.
$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)
Вместо того, чтобы полагаться на расширение отправленного клиентом, вы можете также определить тип файла, используя fileinfo (PHP> = 5,3), или если вы используете более старую версию PHP, что-то вроде mime_content_type
После того, как вы имеете пантомимы тип файла, это просто вопрос отображения (например, «изображение/PNG» => «PNG»)
(Должно быть на самом деле лучше, по соображениям безопасности, если я правильно помню, , $ _FILES ['...'] ['type'] отправляется клиентом и может быть фальшивым)
Если вы используете хорошо обновленный сервер wi th PHP 5.3, вы должны заглянуть в новое расширение File Information. Он рассмотрит сами файлы и попытается определить тип mime, из которого вы можете получить расширение. Это более надежно, чем просмотр расширения или типа mime, предоставленного браузером, так как оба они могут быть подделаны.
Идеальное решение может использовать комбинацию всех этих методов для максимальной эффективности.
Я использовал 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']));
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') {
// код ............. }
Нет! Будьте очень осторожны, делая это. Убедитесь, что расширение имеет соответствующий тип (gif/jpg/png), а не что-то возможно исполняемое (например, .php). –
Согласен, на самом деле ретроспективно, я бы проверял оба. – Gav