2009-07-15 5 views
1

웹 사이트에 PHP를 사용하고 있습니다. 나는 사용자가 그들의 사진을 업로드하도록해야한다. 사진은 jpeg 또는 png 또는 gif 형식 일 수 있습니다. 내 문제는 고유 한 사용자 ID로 사용자를 식별하므로 사진을 저장하려면 userid.jpg 또는 userid.png 등입니다. 이제 사용자가 선택한 파일의 확장명을 어떻게 알 수 있습니까? PHP를 사용하여?PHP를 사용하여 업로드하는 파일의 확장자를 찾으십시오.

답변

6

나는 않을 것 방문자가 제공 한 파일 확장자에 의존합니다. 대신 파일 자체에 무엇이 있는지 물어보십시오 (여전히 스푸핑 될 수는 있지만 그 가능성은 적고 확장자가 3 또는 4 문자 (예 : jpg, 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

당신은

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

또는

을 할 수있는 당신이

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

이 가정

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

대신 클라이언트에서 보낸 확장에 의존, 당신은 또한 fileinfo을 사용하여 파일 형식을 확인할 수 있습니다 (PHP> = 5.3), 또는 당신은 mime_content_type

같은 이전 PHP 버전, 뭔가를 사용하는 경우 이 파일의 MIME 타입이 있으면

, 그것은 ('이미지/PNG로'=> 'PNG'처럼) 매핑 단지 문제

(실제로는 보안상의 이유로 더 나은되어야한다 내가 정확히 기억한다면 , $ _FILES [ '...'] [ 'type']은 클라이언트에 의해 전송되어 위장 될 수 있습니다.

2

잘 업데이트 된 서버를 실행중인 경우 위 PHP 5.3, 당신은 새로운 File Information 확장을 조사해야합니다. 파일 자체를 살펴보고 확장자를 가져올 수있는 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

하이

  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 '|| $ type =='. JPEG ') $ type =='. {

// 귀하의 코드 ............. }

관련 문제