728x90
PHP에서 개발을 하다보면, 파일 여러개를 한 번에 업로드 해야할 때가 있습니다.
파일이 하나가 오든 여러개가 오든 관계 없이 원하는 경로로 파일을 업로드 해주는 메소드입니다.
파일명은 "fileUploader.php"으로 해주시고
<?php
$files = $_FILES;
if ($files != null) {
// 확장자에 맞게 파일을 이동시킵니다
fileUploader($files);
print_r($files);
}
/** fileUploader($files)
* 출력 결과는 아래와 같은 형식입니다.
* Array
* (
* [file1] => Array
* (
* [name] => titan_huygens.jpg
* [type] => image/jpeg
* [tmp_name] => /tmp/phpdcM5ud
* [error] => 0
* [size] => 35794
* )
*
* [file2] => Array
* (
* [name] => spherule_apollo11_big.jpg
* [type] => image/jpeg
* [tmp_name] => /tmp/phpCsrxK9
* [error] => 0
* [size] => 45941
* )
* )
*/
function fileUploader($files)
{
// 아래처럼, 배열 안에 원하는 확장자를 넣으면 됩니다.
// $allowed_ext = array('jpg', 'jpeg', 'png', 'gif');
$allowed_ext = array('jpg', 'jpeg', 'gif');
// $files에서 하나씩 꺼내어 설정한 디렉토리로 이동
foreach ($files as $each_file) {
// 변수 정리
// 에러코드
$error = $each_file['error'];
// 파일명
$src_name = $each_file['name'];
// 서버에 임시 저장된 이미지의 임시 이름
$tmp_name = $each_file['tmp_name'];
// 목적지 경로. 원하는 경로로 바꾸셔서 사용하시면 됩니다.
$dst_name = "/var/www/html/messenger-php/images/" . $src_name;
// 확장자
$ext = array_pop(explode('.', $src_name));
// 아래 주석을 풀어보시면 변수의 값들을 확인할 수 있습니다.
// echo $src_name . "\n";
// echo $tmp_name . "\n";
// echo $dst_name . "\n";
// 오류 확인
if ($error != UPLOAD_ERR_OK) {
switch ($error) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
echo "파일이 너무 큽니다. ($error)";
break;
case UPLOAD_ERR_NO_FILE:
echo "파일이 첨부되지 않았습니다. ($error)";
break;
default:
echo "파일이 제대로 업로드되지 않았습니다. ($error)";
}
exit;
}
// 확장자 확인
if (!in_array($ext, $allowed_ext)) {
echo "허용되지 않는 확장자인 파일이 있습니다.";
exit;
}
// 파일 이동
move_uploaded_file($tmp_name, $dst_name);
}
}
아래 사진은, Postman을 활용해서 요청을 보낸 결과입니다. 서버에 file1, file2를 보내면 정상적으로 업로드 됩니다. 에러가 출력되지 않았으니, 이미지 경로($dst_name)로 직접 들어가시면 파일이 있을 것입니다.
아래 사진은, 'png'확장자가 있는 파일이 있기 때문에 에러 메시지를 출력하였습니다.
'PHP' 카테고리의 다른 글
[PHP] Retrofit 라이브러리를 사용해서 서버에 파일 업로드하기(서버) (0) | 2023.10.20 |
---|---|
[PHP] 커스텀 토스트 메시지 띄우기 (0) | 2023.07.06 |
[PHP] xlsx writer로 엑셀파일 생성하기. (0) | 2023.03.09 |
[PHP] number_format 함수로 숫자 포맷팅하기. (0) | 2023.03.08 |
[PHP] png 파일 압축해서 업로드하기 (0) | 2022.12.06 |