найти расширение загружаемого файла с помощью php - PullRequest
1 голос
/ 16 июля 2009

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

Ответы [ 9 ]

6 голосов
/ 16 июля 2009

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

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

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

5 голосов
/ 16 июля 2009

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

Если у вас есть MIME-тип файла, это просто вопрос отображения (например, 'image / png' => 'png')

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

2 голосов
/ 16 июля 2009

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

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

1 голос
/ 16 июля 2009
array_pop(explode(".", $_FILES["image"]["name"]))

или

pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION)
1 голос
/ 16 июля 2009

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

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

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

$info = pathinfo($_FILES['foo']['name']);
$extension = $info['extension'];
1 голос
/ 16 июля 2009

$filename = "harbl.jpg";
$fileinfo = <a href="http://us3.php.net/manual/en/function.pathinfo.php" rel="nofollow noreferrer">pathinfo</a>($filename);
echo($fileinfo['extension']);           // prints "jpg"
0 голосов
/ 16 сентября 2009

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

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

0 голосов
/ 16 июля 2009
$extension = end(explode(".",$_FILES['foo']['name']));
0 голосов
/ 16 июля 2009

Я использовал 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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...