생활코딩 | PHP - 파일 업로드 수신에플리케이션
본문
※ 영상을 선명하게 보기 안내
- 유튜브 영상에서 오른쪽하단에 톱니바퀴를 클릭합니다.
- 팝업목록에서 "품질" 선택하세요.
- 원하는 해상도를 선택해주세요.
※ 모바일에서 Wifi가 아니라면 데이타가 소진될 수 있으니 주의바랍니다.
생활코딩님의 PHP강의 청각장애인을 위한 자막

이번 시간은 그 업로드된 파일을 서버 쪽에서 받는
어 수신자 측의 구현 예 동작 방법이런 것들에 대해서 알아보겠습니다 자 보시는 것처럼 음 제가 여기에서
업로드 버튼을 클릭했을 때 요 사용자가 선택한 파일이 서버쪽 으로 전송이
되죠
전송되는 과정에서 http 프로토콜의 따라서
요청 메시지를 서버 쪽으로 전달을 하게 되면 서버 는 그것을 받아서
어 일련의 처리를 진행하게 되는데요 바로 그것을 담당하는 파일이 예
여기에 있는 1점 php 라는 파일이 9
1점 php 라는 파일은 요렇게 생겼습니다
자 여기 있는 내용을 하나하나 예 차근차근 살펴보도록 하죠
자 여기에 여러 개의 코드가 있고 어떻게 본 내용이 좀 복잡할 수 있는
것들인데
여기에서 어 순서대로 하나씩 보는것도 좋지만
여러분들이 이 코드를 이해하기 위해서 먼저 선행 해서 알고 계셔야 될
것들 또 우선순위를 더 서 먼저 이해해야 될 것들을 제가 하나하나 설명을
좀 드리는게 좋을 것 같습니다
그래서 서버로 여러분들이 파일을 전송하게 되면 이 전송 안 파일에 대한
여러가지 정보들을
2 php 엔진이
여러분에게 제공을 하게 되는데 그 제공하는 방법이 바로 이겁니다
달러 언더파 이스 라고 하는 이 변수 안에
업로드된 파일에 대한 정보가 담겨 있습니다
자 그럼 제가 자 여기서 액 cc 라고 하고요
xd 라고 하는 것도 좀 알아보죠 액 cc 라고 하는게 요렇게 등장하면
이 뒤에 있는 코드는 그 어떤 것도 실행되지 않고 이 액 씻어 즉시 이
php 애플리케이션의 실행에 종료되는 그런 명령입니다
자 그리고 어 방금 제가 말씀드렸던 딸라 언더바 파일 스 라고 하는 요
변수를 바 덤불에 탐구 요
요걸 실행을 하게 되면 받음 푸 라고 하는 저 명령으로 인해서 져 함수
안에 인자로 적 전달이 됐기 때문에
달러 언더와 파이스 안에 담겨 있는 데이터를 우리가 볼 수가 있겠죠
자 그러면 한번 실행을 시켜 볼게요
자 여기서 파일 업로드 버튼을 눌렀을 때 자 이렇게 생겨 화면이 뜨는데요
뭐 조금 더 보기 좋도록 제가 페이지 소스 보기 를 한번 해보겠습니다
그러면 조금 더 보기 좋도록 화면에 출력이 됩니다
자 여기 보시는 것처럼 음
어 달러 언더바
파일 수 라고 하는 요 변수는
변수를 바 덤프로 출력해 보니까 이 변수가 배열이 라는 것을 우리가 알
수 있게 됩니다
그리고 그 배열에 는 어처피 2번째 키 값으로 첫번째 인덱스는 첫번
어 그 배열 안에는 다시 요 그 배열 안에는 또 여러 개의 이 값들이
있는데 그 첫번째 값이
유저 파일이라고 하는 식별자 인덱스 또는 키 값을 갖고 있는 거죠
그리고 유저 파일은 우리가 포함해서
어 파일 텍스트 하니 파일 컨트롤의 네임으로 지정했던 값이 바로 유저
파일이죠
그리고 그 유저 파일의 유저 파일은 또 배열로 배열이 담겨져 있는데 그
배워라 렌은 하나 둘 셋 넷 다섯 개의 요소가 있고 자 첫번째 요소인
네임 이라고 하는 기 값을 가지고 있는 것은 9점 png 지 우리가
전송한 우리가 업로드한 파일의 실제 이름
파일의 실제 이름이 네임 이라고 하는 기 값을 가지고 있구요
그리고 그 파일에 대한 어떤 형식 즉 이미 지고 이미지 중에 png 다
라고 하는 그 형식이 타입 이라고 하는 키 값으로
우리에게 전달이 됩니다 그리고 여기 보시면 템프 네임 이라고 적혀
있습니다 템프 네임 자 템프 는
에어 temp
그래서 템퍼링 즉 임시 라는 뜻이구요
nam 이라고 하는 것은 뭐 임시 이름 이라는 뜻이죠 왜 임시 이름이라는
것이 있을까요
왜 그러냐면 여러분이 자 여기 조그맣게 그릴게요 서버
자
서버 가 이렇게 있구요
클라이언트가 있을 때 자 클라이언트 브라우저를 통해서 어떤 특정한 파일을
서버로 전송을 하게 되면 그 파일은 자동으로
이 서버에 있는 임시 디렉토리
안에 무조건 들어가게 됩니다 임시 디렉토리 안에
그리고 여러분들은 그 임시 디렉터리 안에 있는 그 업로드된 파일을
여러분이 원하는 디렉토리로 프로그래밍 쪽으로 이동 시켜야 됩니다
그렇기 때문에 여기에 있는 템프 언더바 네임 이라고 하는 것은 이
브라우저가 전송한 파일이 서버 에 위치하는
임시 디렉토리 상에 경로를 나타내고 있는 것이고요
여러분들은 이 경로 즉 c 드라이브에 윈도우즈 밑에 템프 밑에 php 7
7 f 2.8 엠프 라고 하는 저 파일의
요 경로를 여러분들이 알고 있어야지만 요 파일을
여러분이 원하는 디렉토리로
이동시킬 수가 있게 되는 겁니다
요 이동하는 방법은 지금 살펴볼 것니라 있다가 살펴볼 거니까요
지금은 고 정도 수준에서 많이 하시면 됩니다
그리고 만약에 파일 업로드 하는 과정에서 어떤 오류가 있었다 그러면요
에러 라고 하는 요 키 값에
어떤 값이 밸류가 있겠죠
근데 이게 영 이라는 것 이 값이 없다는 것은 에러가 없었다 라는 뜻이고
자 사이즈라고 하는 것은 업로드된 요 파일의 억 크기를 나타내는 것이죠
그리고 이 크기의 값은 바이트 단위 이기 때문에
역 2000 이렇게 큰 말이 지금 이해가 약 13km 아이트 정도 된다는
것을 알 수가 있는 겁니다
자 그러면 제가 만약에 여러개 파일을 전송해 따면 어떻게 될까요 그럼
코드를 조금 바꿔보면 되겠죠
자 여기 있는 내용을 조금 수정을 해 볼게요 자 여기 html 내용을
자 카피하고 유저 파일을 이루 한 다음에 저장을 했습니다
자 그리고 그리고 새로 고침 을 하게되면 찾아보기가 2개가 있죠 그래서
제가 1점 png 라는 파일과 또 찾아보기 에서 2점 피 인지 라는 파일
두개를 선택하고 업로드를 업로드 해보겠습니다 그러면 어 딸라 언더바
파파이스 라고 하는 그 변수 안에는 어떤 값이 담겨 지게 되는가 라는
것을 보자 는 거에요 자 업로드
자 뭐 좀 복잡하죠 이걸 한번 열어 보면 자 보시는 것처럼 예
자 보시는 것처럼 어
달러 언더바 파일 쓰라고 하는 이 변수 안에는
어
배열이 담겨지는 데 그 배열은 두개의 값을 갖는다 라고 되어 있죠
그리고 그 두 개의 이 값들은 어 연간 배열로 식별되는 연관 배열 형태로
저장이 되어 있는데 하나는 유저 8
또 하나는 유저 파일 투로 식별이 됩니다
여기 있는 요 값들은 제 다시 설명드리면
임프
다이
input 타입은 파일이 곤 am 이라고 하는
어 이 속성의 값으로 지정된 요 내용이 이 값이 바로 요것이 되는 겁니다
예 그리 우리는 그 파일을 선택하는
이 파일 선택 컨트롤을 2개를 사용했기 때문에 보시는 것처럼 두 개의
데이터를
달러 언더가 파파이스 라고 하는 변수가 갖게 되는 것이죠
예 요걸 통해서 여러분들이 이해 하셔야 될 건 뭐냐면
자 달러 언더바 파일 스 라고 하는 요 변수는
자 이 변수는 특수한 변수입니다 그리고 약속되어 있는 변수에 요
여러분들은 어 사용자가 전송한 파일이 딸라 언더 파일에 대한 정보가 딸라
언더파 있으라고 하는 저편 수에 담겨있다는 것을 알고 계셔야 되는 겁니다
저건 이에 영역니라 알아야 되는 영역입니다
아시겠죠 그럼 어떻게 저걸 할 수 있냐 저거는 php 에 메뉴얼에 나와
있어요 그렇게 된다 라는 것이 예
자 여기에 이제 이 파일을 업로드하고 파일 제어 업로드된 파일을 제어하는
것에 있어서 핵심적인 어 기본지식이 입니다
예 요걸 기반의 해서 이제 우리가 끅 살펴보았던 1점 php 라는 파일을
보면 훨씬 더 이야기가 수월할 겁니다
여러 한번 파일을 한번 열어 볼게요
아 여기 있는 내용을 이렇게 찍
자 여기서 음
딸라 업로드 dir 이라고 하는 변수를 제가 선언을 했고 그 변수에
어떠한 값을 이렇게 지정을 했죠
이 값은 뭐냐면 임시 디렉토리 1
임시 디렉토리에 위치하고 있는 업로드된 파일을
여러분이 이동 시키려고 하는
어 파일 디렉토리
의 경로를 지정한 것이 업로드 dir 입니다
그래서 여기는 제가 지금 윈도우 환경에서
이 수업을 만들고 있기 때문에 이 경로가 윈도우 방식의 경로가 지정이
되어 있는데 만약에 여러분들이 맥을 쓰고 있거나 또는 리눅스를 쓰고
있다면 리눅스 방식으로 병력을 지정하시면 됩니다
작은데 윈도우 쓰시는 분들 여기 끝에 / 가
예 2번 들어가야 된다는 거 유의하셔야 됩니다 이 / 가 어 하나만
있으면 문제가 생길 겁니다 한번 해보시고요
요거를 2개 하는 이유는 자 역시 / 는 역 쓸래 시 뒤에 오는 특수한
기어드 예를 들면 따옴표 나 슬래시 와 같은 것들을
이 문자로 취급하게 해주는 이스케이프 핑의 기능을 갖고 있습니다
요 우리가 예전 시간에 배웠는데요 그렇게만 제가 언급을 하고 이 부분
넘어 갈게요
자 그 다음에 딸라 언더바 안에 딸라 업로드 파일이 라고 하는 것은 그
업로드된 파일 즉 임시 디렉토리에 머물고 있는 이 파일이 어느 파일
디렉토리의 어느 파일명으로 저장 돼야 되는가에 대한
이 정보를 담고 있는 겁니다 그래서 그 파일이 저장 돼야 되는 파일
디렉토리가 앞쪽에 나오고요
그리고 점 점 이라고 하는 것은 문자 문자를 결합하는 변산 잘하는 것
기억나시죠
그 다음에 이 뒤에다가 요기 있는것 베이스 내음이 있다가 보육 보고요
자 이거 를 결합해 졌습니다 자 딸라 언더가 파이스 요건 업로드된 파일에
대한 정보를 담고 있는 변수 줘
그리고 유적 파일이 라고 하는 것은 이 파일 컨트롤의 잉크 값이 유저
파일 인 컨트롤을 통해서 업로드된 파일에 대한 정보가
이 안에 담겨 있죠 그리고 네임 이라고 하는 것은 그 파일의 원래 이름
예 그 파일의 원래 이름이 네임 이라고 하는 저 키 키의 값으로 저장이
되어 있는 것이죠
그렇게 해서
파일이 저장될 디렉토리와 파일의 이름을
결합해서
그 파일의 최종적인 어 경로를 지정하는 겁니다 자 근데 그 중간에 베이스
네임이 요렇게 끼어 있는데
요것도 이따가 기회가 되면 살펴보도록 하겠습니다
지금 먼저 말씀드릴 수 있는 것은 보안과 관련된 부분입니다
일단 베이스 네임은 지금 중요한 건 아닙니다
자 그 다음에 그 다음에 무 부
언더바 없노 5 디드 언더바 파일 이라는 함수가 등장했습니다
그리고 이 함수의 첫 번째 인자로는
자 유저 파일의 템프 언더 만에 이미 나왔죠
자 템프 언더가 2
요것은 뭐였죠 예 업로드된 파일이 최초로 의 위치하고 있는 임시
디렉토리에
경로가 템프 언더바 레이미 라는거
제가 앞에서 말씀드렸습니다 그리고 두 번째 인자로는 업로드 파일을 두
번째 인자로 제실 했죠
이건 뭐죠 임씨 디렉토리에 있는 파일이 최종적으로 위치 해야되는
어 경로에 값이 업로드 파일의 지정이 되어 있죠
여기서 제가 얘기한 경로는 그 파일이 위치하는 디렉토리 분만 아니라 그
파일의 이름까지도 포함하는 개념입니다
자 그래서 엄 무브 업로드 없노 dd 파일이라고 하느뇨 함수는
여러분 아 이 함수는 두개의 인자를 봤는데 첫 번째 인자는
어 실제 파일의 이름
파일경로 줘 경로 5
그리고 두 번째 인자로는 그 파일을 이동시킬 경록
이동 경록 이렇게 두개의 인자를 봤습니다
자 물러 우리는 음 요 명령 말고 이 파일을 이동시키는 다른 명령을
통해서도
임시 디렉토리에 있는 임씨 디렉토리에 저장되어 있는 파일을 원하는
디렉토리로 이동 시킬 수가 있습니다
근데 무브 업로드 파일이 라고 하는 것을 쓰는 이유는 이 php 가
내부적으로 무브 업로드 파일이 라고 하는 저 그것을 통해서 그 업로드된
파일이 보안상 문제가 없는가
위험성이 없는가 이런것들 내부적으로 체크하는 로직이 저안에 함이 되어
있습니다
그렇기 때문에 여러분들은 저것을 통해서 파일을 이동 시키셨다 됩니다
아시겠죠
여러분이 직접 임시 디렉토리에 있는 파일을 원하는 디렉토리로 이동 시키는
것니라 저 무브 엄 노바 없노 디드 파일이라고 하는 것을 꼭
이용해서 파일을 이동시키는 것이 이 php 에서 어 권장하는
2 공식적인 접근 방법입니다
자 그래서 으
2 무 부 없노 디드 파일이라고 하는 요 함수는 두개의 값을 리턴합니다
뭐냐면 투르 와
paul's 를 리턴 에요
그래서 그래서 만약에 툴을 l 난 경우에는
업로드에 성공했고 그 이동하려고 하는 파일이
어 정상적으로 잘 이동 돼 따 보안상 문제점이 없다 이런 것
이런 것을 의미하게 되는 것이고요 만약에 업로드에 실패해서 paul's
가 나온다면 예 그 파일이 보안에 어떤 문제가 있다 또는 권한의 어떤
문제가 있다
그런 것을 의미하게 되는 겁니다 그래서 지금 보시면 조건문 으로
2무 번 업로드 파일이 라고 하니 함수가 조건문 안에 들어가 있고 그것이
참이라면 파일이 유아 고 성공적으로 업로드 되었다 라는 것이 출력이
되고요
만약에 그것이 리턴값이 펄스 하면 파일 업로드에 공격 파일의 업로드 된
파일이 이 잠재적으로 보안에 위협이 있다 라는 메세지를 출력하고 있는
것이죠
자 그 다음에 여기에 있는 요 프린트 언더바 앓이 라는 것은 받음 프랑
거의 비슷합니다
예 받은 불안 거의 비슷한 명령 이라고 보시면 되고요 그리고 달러 언더와
파파이스 즉 우리가 업로드한 파일의 대한 정보를 담고 있는 저 변수에
담겨 있는 데이터를 화면에 출력한다. 라는 뜻인 거죠
그 다음에 이미지 img 태그 는 이미지를 화면에 출력하는 html 태그
입니다
그리고 src 속성으로
업로드된 파일 임시 디렉토리에 저장되어 있던 것을 우리가 최종적으로
이동시킨 그 경로 있죠 그 경로를 src 의 값으로 이렇게 부여를 하게
되면 여기에 있는 img 태그가 브라우저에서
해석 되서 src 안에 있는 이 경로에 있는 파일을
브라우저가 다운로드 받아서 화면에 출력하게 되는 것이죠 자 그런데 이
경로가 요렇게 되어 있는 이유는
예 그 이유는 조금만 있다가 살펴보도록 하죠
어떻게 이 주된 흐름이 이해가 가시나요
이 파일 업로드 라는거 사실은 대단히 복잡한
이 잠 이 흐름이
어 내부적으로는 깔려 있는 겁니다 그걸 php 가 아주 간편하게 해 줄
수 있도록 해주는 것이 우리가 php 와 같은 서버 사이드 언어를
이용하는
중요한 이유 고요 php 는 이 파일 업로드를 대단히 편리하게 만들어
놓은 편이에요
다른 언어에서는 이 업로드된 파일을 여러분이 수용하는
메카니즘이 상당히 복잡한 구현을 요구하는 경우가 많습니다
이게 php 갖고 있는 장점이라고 할 수 있겠죠
이렇게 해서 php 애플리케이션이 업로드된 파일을 쓰신 받는 방법에
대해서 우리가 큰 틀을 알아 봤구요
그리고 제가 이 코드에서 설명드리지 않았던 것들 을 마저 설명들이 있는
시간을 다음 동영상에서 갖도록 할게요
댓글 0개
등록된 댓글이 없습니다.