PHP에서 업로드 형식의 파일 확장자 확인
나는 파일 확장자가 업로드되었는지 업로드되지 않았는지 확인합니다.예시적인 방법은 효과가 있었지만, 이제는 내 방법(사용)을 이해되어야 합니다.pathinfo
)는 사실입니다.더 좋고 빠른 다른 방법이 있습니까?
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext !== 'gif' || $ext !== 'png' || $ext !== 'jpg') {
echo 'error';
}
사용.if( $ext !== 'gif'
)가 효율적이지 않을 수 있습니다.20개 정도의 다른 연장을 허용한다면요?
시도:
$allowed = array('gif', 'png', 'jpg');
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (!in_array($ext, $allowed)) {
echo 'error';
}
파일 확장명을 확인하는 것은 모범 사례로 간주되지 않습니다.이 작업을 수행하는 데 선호되는 방법은 파일 MIME 유형을 확인하는 것입니다.
PHP에서:
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); // Return MIME type
foreach (glob("*") as $filename) {
echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>
위의 예는 확인해야 하는 것과 유사한 것을 출력합니다.
text/html
image/gif
application/vnd.ms-excel
MIME 유형을 속일 수도 있지만(파일의 처음 몇 바이트를 편집하고 마법 번호를 수정) 파일 이름을 편집하는 것보다 어렵습니다.따라서 해당 파일 유형이 실제로 무엇인지 100% 확신할 수 없으며 사용자가 업로드/이메일로 전송한 파일을 처리하는 데 주의해야 합니다.
개인적으로 preg_match() 함수를 사용하는 것을 선호합니다.
if(preg_match("/\.(gif|png|jpg)$/", $filename))
또는 in_array()
$exts = array('gif', 'png', 'jpg');
if(in_array(end(explode('.', $filename)), $exts)
와 함께in_array()
검증 및 수행 질문에 대한 확장자가 많은 경우 유용할 수 있습니다.파일 이미지의 유효성을 검사하는 또 다른 방법:@imagecreatefrom*()
기능이 실패하면 이미지가 유효하지 않음을 의미합니다.
예:
function testimage($path)
{
if(!preg_match("/\.(png|jpg|gif)$/",$path,$ext)) return 0;
$ret = null;
switch($ext)
{
case 'png': $ret = @imagecreatefrompng($path); break;
case 'jpeg': $ret = @imagecreatefromjpeg($path); break;
// ...
default: $ret = 0;
}
return $ret;
}
그러면:
$valid = testimage('foo.png');
라고 가정하면foo.png
의 PHP 스크립트 파일입니다..png
확장, 위의 기능이 실패합니다.셸 업데이트 및 LFI와 같은 공격을 피할 수 있습니다.
pathinfo는 멋지지만 코드를 개선할 수 있습니다.
$filename = $_FILES['video_file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$allowed = array('jpg','png','gif');
if( ! in_array( $ext, $allowed ) ) {echo 'error';}
물론 파일 이름의 확장자를 확인하는 것만으로는 파일 형식이 유효한 이미지로 보장되지 않습니다.다음과 같은 기능을 사용하는 것을 고려할 수 있습니다.getimagesize
업로드된 이미지 파일의 유효성을 검사합니다.
파일 형식은 다른 방법으로도 확인할 수 있습니다.이게 업로드된 파일 종류를 확인하는 가장 쉬운 방법이라고 생각합니다.이미지 파일을 처리하는 경우 다음 코드로 이동합니다.만약 당신이 비디오 파일을 다루고 있다면, 이미지 체크를 if 블록의 비디오 체크로 대체하세요.즐겁게 보내세요
$img_up = $_FILES['video_file']['type']; =으로 증가함 $img_up_type = img_up/, $img_up); = $ $img_up_type_firstpart = $img_up_type[0];img_up_type_firstpart == "image") { // image가 이미지 파일 형식이라면 비디오 파일 형식을 확인해야 할 경우 비디오를 처리할 수 있습니다.
논리 코드를 실행합니다 */}
이를 올바르게 수행하려면 MIME 유형을 확인하는 것이 좋습니다.
function get_mime($file) {
if (function_exists("finfo_file")) {
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mime = finfo_file($finfo, $file);
finfo_close($finfo);
return $mime;
} else if (function_exists("mime_content_type")) {
return mime_content_type($file);
} else if (!stristr(ini_get("disable_functions"), "shell_exec")) {
// http://stackoverflow.com/a/134930/1593459
$file = escapeshellarg($file);
$mime = shell_exec("file -bi " . $file);
return $mime;
} else {
return false;
}
}
//pass the file name as
echo(get_mime($_FILES['file_name']['tmp_name']));
계산 시간이 더 빠를지는 모르겠지만 다른 옵션은...
$acceptedFormats = array('gif', 'png', 'jpg');
if(!in_array(pathinfo($filename, PATHINFO_EXTENSION), $acceptedFormats))) {
echo 'error';
}
이것이 당신에게 효과가 있을 것이라고 생각합니다.
//<?php
//checks file extension for images only
$allowed = array('gif','png' ,'jpg');
$file = $_FILES['file']['name'];
$ext = pathinfo($file, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) )
{
//?>
<script>
alert('file extension not allowed');
window.location.href='some_link.php?file_type_not_allowed_error';
</script>
//<?php
exit(0);
}
//?>
업로드하기 전에 양식에서 파일 확장명(jpg/jpeg만 해당)의 유효성을 검사하는 방법.다른 게시된 양식 값을 평가할 때 유용할 수 있는 데이터 필터가 포함된 다른 게시된 답변의 변형입니다.참고: 사용자가 요구사항이 아닌 선택사항이었기 때문에 비어 있으면 오류가 비어 있습니다.
<?php
if(isset($_POST['save'])) {
//Validate image
if (empty($_POST["image"])) {
$imageError = "";
} else {
$image = test_input($_POST["image"]);
$allowed = array('jpeg','jpg');
$ext = pathinfo($image, PATHINFO_EXTENSION);
if(!in_array($ext,$allowed) ) {
$imageError = "jpeg only";
}
}
}
// Validate data
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
<?
HTML은 다음과 같이 나타납니다.
<html>
<head>
</head>
<body>
<!-- Validate -->
<?php include_once ('validate.php'); ?>
<!-- Form -->
<form method="post" action="">
<!-- Image -->
<p>Image <?php echo $imageError; ?></p>
<input type="file" name="image" value="<?php echo $image; ?>" />
<p><input type="submit" name="save" value="SAVE" /></p>
</form>
</body>
</html>
이 함수를 사용합니다.
function check_image_extension($image){
$images_extentions = array("jpg","JPG","jpeg","JPEG","png","PNG");
$image_parts = explode(".",$image);
$image_end_part = end($image_parts);
if(in_array($image_end_part,$images_extentions ) == true){
return time() . "." . $image_end_part;
}else{
return false;
}
}
언급URL : https://stackoverflow.com/questions/10456113/check-file-extension-in-upload-form-in-php
'sourcecode' 카테고리의 다른 글
TeamCity PowerShell 러너에서 전파할 오류를 표시하려면 어떻게 해야 합니까? (0) | 2023.08.31 |
---|---|
AJAX CORS 및 보안 고려 사항 이해 (0) | 2023.08.31 |
jquery 및 ajax를 사용하여 json 개체를 mvc 컨트롤러에 게시합니다. (0) | 2023.08.31 |
우리가 조건부로 과제를 할 수 있습니까? (0) | 2023.08.31 |
도커가 마리아에게 링크를 작성합니다.DB (0) | 2023.08.31 |