R's Hacking Daily Log

php - File Upload (1) 본문

PHP

php - File Upload (1)

hanhxx 2023. 7. 25. 15:07

Step :: file upload 

파일을 업로드 & 다운로드하는 과정은 크게 

1. 업로드할 파일을 선택

2. 업로드 or 다운로드 버튼 클릭

3. 파일 업로드 or 다운로드 완료

의 흐름으로 진행된다. 

 

따라서 이 과정을 처리할 코드 또한, 여러 개로 분할하여 구현할 필요가 있다. 

그중에서도 우선 업로드할 파일을 선택할 수 있는 form을 만들어보자. 

 


 

흔히 파일을 업로드하는 form은 (1)파일을 선택하는 버튼과 (2)전송 버튼으로 구성된다. 

 

[ file_upload_form.php ]

<html>
    <head>
        <title>File Upload Form</title>
    </head>
    <body>
        <h1>File Upload Example</h1>
        <form action="./file_upload.php" enctype="multipart/form-data" method="post">
            <input type="file" name="myfile">
            <button>SUBMIT</button>
        </form>
    </body>
</html>

전체적인 구성을 보면 form tag 안에 input & button tag가 하나씩 들어있다.

 

input tag의 유형이 file이기 때문에 파일을 선택할 수 있는 형태의 element가 만들어지고

파일을 선택한 후 button tag를 클릭하면 된다.

 

button tag를 클릭하면 form tag에 설정된 action 경로로 이동하게 된다. 

또한 업로드한 파일이 서버로 전달되는 데 이 파일을 가리키는 이름은 input tag - name 값을 사용한다.

 

(!!) file upload를 위해서는 

form tag - enctype은 반드시 multipart/form-data

form tag - method는 반드시 post로 지정되어야 한다. 

 

 

코드 결과로 만들어진 페이지는 아래와 같다.

파일 선택 버튼을 누르면 우측 사진처럼 파일을 선택할 수 있는 화면이 나타난다. 

 

 

파일을 선택하고 나면 "선택된 파일 없음" 문구였던 부분이 선택한 파일의 이름으로 변경된다. 

 


 

위에서 살펴보았듯이 file 형태의 데이터를 전달하기 위해서는 input tag를 file type으로 지정하면 된다.

 

다만 파일을 선택하고 전송할 버튼을 감싸고 있는 form tag는 

enctype & method에 적절한 값을 설정해줘야 한다는 점을 주의해야 한다. 

 

* method = 데이터를 전달할 http method [ get or post ]

* enctype = encypt type, 암호화 방식

 


 

다음으로 SUBMIT 버튼의 기능을 구현하기 전에 파일 업로드와 관련된 오류코드에 대해 살펴보고자 한다.

 

PHP는 파일 업로드 시, 성공적으로 업로드하더라도 오류 코드를 반환하기 때문에 

그 종류와 의미에 대해 한 번쯤 훑어볼 필요가 있다. 

 

오류값 오류 코드 의미
0   UPLOAD_ERR_OK   업로드 완료!
1   UPLOAD_ERR_INI_SIZE   php.ini에 설정된 최대 파일 크기 초과
2   UPLOAD_ERR_FROM_SIZE   html form에 설정된 최대 파일 크기 초과
3   UPLOAD_ERR_PARTIAL   파일 일부만 업로드 됨
4   UPLOAD_ERR_NO_FILE   업로드할 파일이 없음!!
5   UPLOAD_ERR_NO_TMP_DIR   웹 서버 임시 폴더가 없음
6   UPLOAD_ERR_CANT_WRITE   웹 서버에 파일 작성이 안됨
7   UPLOAD_ERR_EXTENSION   PHP 확장 기능에 의한 업로드 중단

 

파일을 업로드하는 과정을 간단히 설명하자면

input tag를 통해 파일이 업로드 되고나서 지정된 경로로 바로 들어가는 게 아니라 임시 폴더에 저장되었다가

*설정된 경로*로 이동하는 순서로 진행된다. 

 

이때 거쳐가는 임시 폴더가 없을 경우, 발생하는 오류코드가 UPLOAD_ERR_NO_TMP_DIR인 것!

 

* 설정된 경로로 파일을 이동시킬 때는 move_uploaded_file() 함수를 사용한다.

 

 

설명은 축약적으로 했지만 실제 코드는 폴더가 존재하는지, 파일이 존재하는지, 허용되는 확장자인지 등등

이것저것 확인해보는 과정이 필요하기 때문에 생각보다 코드가 길어질 수 있다는 점을 유의하여..

 

이어서 다음 글에서는 file_upload.php code를 살펴보자!

'PHP' 카테고리의 다른 글

php - File Upload (3)  (0) 2023.07.26
php - File Upload (2)  (0) 2023.07.25
php - HTML Form으로 데이터 전송하기 (2)  (0) 2023.07.24
php - HTML Form으로 데이터 전송하기 (1)  (0) 2023.07.23
php Cookie  (0) 2023.07.22
Comments