PHP
image file
by 영감은어디에
2024. 10. 10.
<?php
$moved = false;
$message = '';
$error = '';
$upload_path = 'uploads/';
$max_size = 5242880; //5메가
$allowed_types = ['image/jpeg', 'image/png', 'image/gif',];
$allowed_exts = ['jpeg', 'jpg', 'png', 'gif',];
function create_filename($filename, $upload_path)
{
$basename = pathinfo($filename, PATHINFO_FILENAME);
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$basename = preg_replace('/[^A-z0-9]/', '-', $basename);
$filename = $basename . '.' . $extension;
$i = 0;
while (file_exists($upload_path . $filename)) {
$i = $i + 1;
$filename = $basename . $i . '.' . $extension;
}
return $filename;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$error = ($_FILES['image']['error'] === 1) ? 'too big ' : '';
if ($_FILES['image']['error'] == 0) {
//사이즈
$error .= ($_FILES['image']['size'] <= $max_size) ? '' : 'too big ';
//타입
$type = mime_content_type($_FILES['image']['tmp_name']);
$error .= in_array($type, $allowed_types) ? '' : 'wrong type ';
//확장자
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
$error .= in_array($ext, $allowed_exts) ? '' : 'wrong file extension ';
//에러없으면 파일 임시에서 최종으로 롬김
if (!$error) {
$filename = create_filename($_FILES['image']['name'], $upload_path);
$destination = $upload_path . $filename;
$moved = move_uploaded_file($_FILES['image']['tmp_name'], $destination);
}
}
if ($moved === true) {
$message = 'Uploaded:<br><img src="' . $destination . '">';
} else {
$message = '<b>Could not upload file:</b> ' . $error;
}
}
?>
<?= $message ?>
<form method="POST" action="validate-file.php" enctype="multipart/form-data">
<label for="image"><b>Upload file:</b></label>
<input type="file" name="image" id="image"><br>
<input type="submit" value="Upload">
</form>