PHP에서 업로드 된 파일 형식을 확인하는 방법
PHPPHP에서 업로드 된 파일 형식을 확인하는 방법
이 코드를 사용하여 이미지 유형을 확인했습니다.
$f_type=$_FILES['fupload']['type'];
if ($f_type== "image/gif" OR $f_type== "image/png" OR $f_type== "image/jpeg" OR $f_type== "image/JPEG" OR $f_type== "image/PNG" OR $f_type== "image/GIF")
{
$error=False;
}
else
{
$error=True;
}
일부 사용자는 어떤 유형의 이미지를 업로드하는 동안 오류가 발생하는 반면 일부 사용자는 오류가 발생하지 않는다고 불평합니다!
이 문제가 해결되는지 궁금 해서요 :
if (mime_content_type ($ _ FILES [ 'fupload'] [ 'type']) == "image / gif") {...
다른하실 말씀 있나요?
해결법
-
==============================
1.$ _FILES .. [ 'type']을 사용하지 마십시오. 여기에 포함 된 정보는 전혀 검증되지 않으며 사용자 정의 값입니다. 직접 유형을 테스트하십시오. 이미지의 경우 보통 exif_imagetype이 좋은 선택입니다.
$ _FILES .. [ 'type']을 사용하지 마십시오. 여기에 포함 된 정보는 전혀 검증되지 않으며 사용자 정의 값입니다. 직접 유형을 테스트하십시오. 이미지의 경우 보통 exif_imagetype이 좋은 선택입니다.
$allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF); $detectedType = exif_imagetype($_FILES['fupload']['tmp_name']); $error = !in_array($detectedType, $allowedTypes);
또는 서버가 지원하는 경우 finfo 함수가 유용합니다.
-
==============================
2.@deceze 외에도 finfo ()를 사용하여 비 이미지 파일의 MIME 유형을 확인할 수 있습니다.
@deceze 외에도 finfo ()를 사용하여 비 이미지 파일의 MIME 유형을 확인할 수 있습니다.
$finfo = new finfo(); $fileMimeType = $finfo->file($path . $filename, FILEINFO_MIME_TYPE);
-
==============================
3.물론 exif를 사용하여 이미지인지 확인할 수는 있지만 finfo와 같이하는 것이 더 좋습니다.
물론 exif를 사용하여 이미지인지 확인할 수는 있지만 finfo와 같이하는 것이 더 좋습니다.
$allowed_types = array ( 'application/pdf', 'image/jpeg', 'image/png' ); $fileInfo = finfo_open(FILEINFO_MIME_TYPE); $detected_type = finfo_file( $fileInfo, $_FILES['datei']['tmp_name'] ); if ( !in_array($detected_type, $allowed_types) ) { die ( 'Please upload a pdf or an image ' ); } finfo_close( $fileInfo );
-
==============================
4.내 생각에 가장 좋은 방법은 imagecreatefromstring () 다음에 getimagesize ()를 먼저 사용하는 것입니다.
내 생각에 가장 좋은 방법은 imagecreatefromstring () 다음에 getimagesize ()를 먼저 사용하는 것입니다.
$size = getimagesize($filename); if ($size === false) { throw new Exception("{$filename}: Invalid image."); } if ($size[0] > 2500 || $size[1] > 2500) { throw new Exception("{$filename}: Image too large."); } if (!$img = @imagecreatefromstring(file_get_contents($filename))) { throw new Exception("{$filename}: Invalid image content."); }
getimagesize ()를 통해 확인하면 일부 DoS 공격을 방지합니다. 이미지 파일이 아닌 파일이나 너무 큰 파일을 사용자가 제공하는 모든 파일에서 imagecreatefromstring () 할 필요가 없기 때문입니다. 불행히도, PHP 문서에 따르면 이미지 형식의 콘텐츠를 확인하기 위해 의존 수 없습니다.
imagecreatefromstring ()은 마침내 파일을 이미지로 열려고 시도합니다. 성공하면 이미지가 있습니다.
-
==============================
5.PHP 5.5에서는이 함수를 사용하여 파일 유형을 가져오고 이미지가 있는지 확인합니다.
PHP 5.5에서는이 함수를 사용하여 파일 유형을 가져오고 이미지가 있는지 확인합니다.
function getFileType( $file ) { return image_type_to_mime_type( exif_imagetype( $file ) ); } // Get file type $file_type = getFileType( 'path/to/images/test.png' ); echo $file_type; // Prints image/png // 1. All images have mime type starting with "image" // 2. No other non-image mime types contain string "image" in it
그럼 당신은 할 수 :
if ( strpos( $filetype, 'image' ) !== false ) { // This is an image }
마임 유형의 전체 목록 : http://www.sitepoint.com/web-foundations/mime-types-complete-list/
-
==============================
6.이것은 자주 사용하는 단순하고 한 줄짜리 스크립트입니다.
이것은 자주 사용하는 단순하고 한 줄짜리 스크립트입니다.
$image = "/var/www/Core/temp/image.jpg"; $isImage = explode("/", mime_content_type())[0] == "image";
기본적으로 mime_content_type ()을 사용하여 "image / jpg"와 같은 것을 얻은 다음 "/"로 분해하고 배열의 첫 번째 요소를 검사하여 "image"가 표시되는지 확인합니다.
나는 그것이 일하기를 바란다!
-
==============================
7.그 마지막 줄은 가깝습니다. 당신이 사용할 수있는: if (mime_content_type ($ _ FILES [ 'fupload'] [ 'tmp_name']) == "image / gif") {...
그 마지막 줄은 가깝습니다. 당신이 사용할 수있는: if (mime_content_type ($ _ FILES [ 'fupload'] [ 'tmp_name']) == "image / gif") {...
현재 작업하고있는 경우 mime_content_type () 및 finfo () (다른 사용자가 제안한)가 "text / plain"을보고하는 동안 my $ _FILES .. [ 'type']은 자체를 "text / csv"로보고합니다. . @deceze가 지적했듯이 $ _FILES .. [ 'type']은 클라이언트가 파일을 어떤 유형으로 생각하는지 알기 위해서만 유용합니다.
-
==============================
8.경고 : 다음 답변은 실제로 파일 형식을 확인하지 않습니다. 이름 만 검사합니다. 실제 보안 목적으로는 적합하지 않습니다.
경고 : 다음 답변은 실제로 파일 형식을 확인하지 않습니다. 이름 만 검사합니다. 실제 보안 목적으로는 적합하지 않습니다.
편집 : 보안 검사를 제공하지 않으므로이 방법을 사용하지 마십시오. 나는 아무도 이처럼 똑같은 실수를하지 않도록이 대답을 남겨두고있다.
나는 다음을 시도했고 그것은 나를 위해 일했다.
$allowed = array('gif','png' ,'jpg', 'pdf'); $filename = $_FILES['input_tag_name']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!in_array($ext,$allowed) ) { echo 'error'; }
소스 링크
from https://stackoverflow.com/questions/6755192/how-to-check-uploaded-file-type-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
나는 정수 배열을 가지고 있는데, 각각을 (PHP에서) mysql 질의에 어떻게 사용합니까? (0) | 2018.09.17 |
---|---|
PHP - MySQL 연결이 작동하지 않음 : 2002 해당 파일이나 디렉토리가 없습니다. (0) | 2018.09.17 |
Javascript 배열 전달 -> PHP (0) | 2018.09.17 |
컨텍스트에 관계없이 SimpleXML 객체를 문자열로 강제 변환 (0) | 2018.09.17 |
PHP 경고 : 호출 시간 기준 전달은 더 이상 사용되지 않습니다. (0) | 2018.09.17 |