복붙노트

PHP에서 업로드 할 때 특정 파일 형식 만 허용 할 수 있습니까?

PHP

PHP에서 업로드 할 때 특정 파일 형식 만 허용 할 수 있습니까?

사용자가 파일을 업로드하는 페이지를 만들고 있습니다. 파일 형식이 다른 jpg, gif 및 pdf 인 경우 if 문에서 $ 오류 변수를 만들려고합니다.

내 코드는 다음과 같습니다.

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

if(/*$file_type is anything other than jpg, gif, or pdf*/) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

나는 if 문을 구조화하는 데 어려움을 겪고있다. 내가 어떻게 말 하겠어?

해결법

  1. ==============================

    1.허용 된 유형을 배열에 넣고 in_array ()를 사용합니다.

    허용 된 유형을 배열에 넣고 in_array ()를 사용합니다.

    $file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype
    
    $allowed = array("image/jpeg", "image/gif", "application/pdf");
    if(!in_array($file_type, $allowed)) {
      $error_message = 'Only jpg, gif, and pdf files are allowed.';
      $error = 'yes';
    }
    
  2. ==============================

    2.PDF 파일도 허용하고 싶다는 사실을 깨달았습니다. 이 경우 PHP의 Fileinfo 클래스와 함수를 확인하십시오. 그러나 보안에 관한 한, 당신은 여전히 ​​$ _FILES [] [ 'type']에 의존해서는 안됩니다 :)

    PDF 파일도 허용하고 싶다는 사실을 깨달았습니다. 이 경우 PHP의 Fileinfo 클래스와 함수를 확인하십시오. 그러나 보안에 관한 한, 당신은 여전히 ​​$ _FILES [] [ 'type']에 의존해서는 안됩니다 :)

    이 질문을 한 다른 사람을 돕기 위해 나머지는 여기에 남겨 두겠습니다.

    이미지의 MIME 유형을 확인하기 위해 $ _FILES [] [ 'type']이 (가) 안전하지 않을 수 있습니다. 이 데이터는 브라우저에서 보내므로 쉽게 스푸핑 될 수 있습니다.

    오해의 소지가있는 이름 임에도 불구하고 이미지 업로드 만 허용하려면 getimagesize () 함수를 사용해야합니다. 이 함수는 크기 만 제공하는 것이 아니라 이미지에 대해 필요한 모든 데이터를 제공합니다.

    이미지 처리 클래스에서 다음 스크립트를 사용했습니다.

    private function load_image_data($image_file) {
    
        // Firstly, to disambiguate a loading error with a nonexistant file error,
        // check to see if the file actually exists.
        if( ! file_exists($image_file) ) {
            throw new Nonexistent_Image_Exception("The file '{$image_file}' does not exist");
        }
    
        // We're going to check the return value of getimagesize, so we don't
        // need any pesky warnings or notices popping up, since we're going to
        // stop execution of this function if something goes wrong.
        $image_data = @getimagesize($image_file);
    
        if( $image_data === false ) {
            throw new Load_Image_Exception("Could not get image data from '{$image_file}'");
        }
    
        $this->size = new Dimensions($image_data[0], $image_data[1]);
        $this->mime = $image_data['mime'];
    
    }
    

    getimagesize ()는 'mime'인덱스가 포함 된 연관 배열을 반환합니다. 여기에있는 데이터는 신뢰할 만합니다.

    다른 함수에서 이미지의 MIME 형식을 확인하고 적절한 GD 함수로 PNG로 변환했습니다.

    private function load_image($image_file) {
    
        // Suppress warning messages because we're going to throw an
        // exception if it didn't work instead.
        switch( $this->mime ) {
        case 'image/jpeg':
        case 'image/pjpeg':
            $this->image = @imagecreatefromjpeg($image_file);
            break;
        case 'image/gif':
            $this->image = @imagecreatefromgif($image_file);
            break;
        case 'image/png':
            $this->image = @imagecreatefrompng($image_file);
            break;
        default:
            throw new Invalid_Image_Exception("The image was of an invalid type");
        }
    
        if( $this->image === false ) {
            throw new Load_Image_Exception("Loading of image '{$image_file}' failed");
        }
    
    }
    

    이 모든 작업을 수행 할 필요는 없지만 지정한 파일 유형에 대해 MIME 유형이 표시되는지 확인할 수 있습니다. jpeg에는 두 가지 MIME 유형이있을 수 있습니다.

    희망이 도움이됩니다.

  3. ==============================

    3.See also Zend Framework의 Zend_File_Transfer_Adapter_Http와 Zend_Form_Element_File. 최소 이미지 해상도, MIME 유형, 최소 파일 크기, 허용되는 파일 확장자 등과 같은 여러 가지 유효성 검사기를 추가 할 수 있습니다.

    See also Zend Framework의 Zend_File_Transfer_Adapter_Http와 Zend_Form_Element_File. 최소 이미지 해상도, MIME 유형, 최소 파일 크기, 허용되는 파일 확장자 등과 같은 여러 가지 유효성 검사기를 추가 할 수 있습니다.

  4. ==============================

    4.이 간단한 코드를 사용하십시오 ...

    이 간단한 코드를 사용하십시오 ...

    <?
    $path = $_FILES['file']['name']; // file means your input type file name
    $ext = pathinfo($path, PATHINFO_EXTENSION);
    
    if ($ext=="jpg" OR $ext=="jpeg" OR $ext=="gif" OR $ext=="png") {
        // your code here like...
        echo "Upload successful";
    }else{
        // your invalid code here like...
        echo "Invalid image format. Only upload JPG or JPEG or GIF or PNG";
    }
    ?>
    
  5. from https://stackoverflow.com/questions/2486329/how-can-i-only-allow-certain-filetypes-on-upload-in-php by cc-by-sa and MIT license