PHP에서 업로드 할 때 특정 파일 형식 만 허용 할 수 있습니까?
PHPPHP에서 업로드 할 때 특정 파일 형식 만 허용 할 수 있습니까?
사용자가 파일을 업로드하는 페이지를 만들고 있습니다. 파일 형식이 다른 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.허용 된 유형을 배열에 넣고 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.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.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.이 간단한 코드를 사용하십시오 ...
이 간단한 코드를 사용하십시오 ...
<? $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"; } ?>
from https://stackoverflow.com/questions/2486329/how-can-i-only-allow-certain-filetypes-on-upload-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
WooCommerce : 자동 완성 된 주문 (결제 수단에 따라 다름) (0) | 2018.09.19 |
---|---|
PHP 배열의 모든 순열을 얻으시겠습니까? (0) | 2018.09.19 |
PHP 5.3 및 5.4 또는 일부 구성 불일치로 배열에 액세스 할 때의 차이점은 무엇입니까? (0) | 2018.09.19 |
PHP에서 JavaScript 변수 값을 얻는 방법 (0) | 2018.09.19 |
PHP, 0으로 나누는 방법은? (0) | 2018.09.19 |