Top Banner
PHP WEB PROGRAMMING 유승열
316

Modern Web Design · 2018. 7. 30. · PHP MySQL Database 118 ¡ PHP Database 118 ¡ MySQLi vs PDO 118 ¡ MySQL 준비 – phpMyAdmin 119 ¡ MySQL에 연결하기 140 ¡ MySQL 데이터

Jan 25, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • PHPWEB PROGRAMMING

    유승열

  • [머리말] 8

    PHP란? 9

    Windows에서 PHP 사용 10

    ¡ PC에서 PHP를 사용하는 방법 10

    ¡ XAMPP 프로그램 다운로드 11

    ¡ 프로그램 설치 11

    ¡ XAMPP 실행 13

    ¡ XAMPP 서비스들 14

    ¡ Apache, MySql 실행 15

    ¡ 컴퓨터 부팅시 Apache, MySql 자동 실행하기 15

    ¡ 웹사이트 확인 17

    ¡ MySql 확인 19

    Scripting Tools 20

    ¡ PHP와 같은 Script 언어를 코딩하는데 사용하는 도구들 20

    Web Server 환경 이해 21

    ¡ DocumentRoot 21

    ¡ DirectoryIndex 21

    PHP "Hello World!” 22

    ¡ Hello World 출력하기 22

    PHP 기본 문법(syntax) 23

    ¡ 23

    ¡ 주석 24

    PHP 변수(Variables) 25

    ¡ 변수(Variables)란? 25

    ¡ 변수 값 출력 : echo 또는 print 25

    ¡ 변수에서 데이터 타입(Type) 26

    ¡ 변수의 유효 범위 : Global, Static, Local 26

    ¡ 변수 설정 여부 확인 및 제거 - isset(), unset(), empty() 29

    PHP 상수(Constants) 32

    ¡ 상수(Constants)란? 32

    ¡ PHP 마법 상수 33

    PHP Data Types 35

  • ¡ PHP에서 지원하는 Data Type들 35

    ¡ PHP Data Type 확인 35

    PHP String(문자열) 37

    ¡ 문자열(String)이란? 37

    ¡ 문자열 관련 함수들 40

    PHP Operators(연산자) 42

    ¡ 연산자(Operator)란? 42

    ¡ 연산자 Types 42

    ¡ 산술(계산) 연산자 42

    ¡ 증감 연산자 43

    ¡ 비교 연산자 44

    ¡ 대입(할당) 연산자 45

    ¡ 문자열 연산자 46

    ¡ 논리 연산자 47

    ¡ 조건 연산자 = 3항 연산자 48

    PHP 조건문 49

    ¡ 조건문이란? 49

    ¡ if, if...else, if...elseif...else 예제 49

    ¡ switch 예제 50

    PHP 반복문(Loop) 51

    ¡ 반복문이란? 51

    ¡ for 51

    ¡ while 53

    ¡ do...while 54

    ¡ foreach 54

    PHP 배열(Arrays) 56

    ¡ 배열이란? 56

    ¡ indexed array 56

    ¡ associative array 57

    ¡ 다차원 배열 57

    ¡ 배열 크기 구하기 58

    ¡ 배열인지 확인하기 59

    ¡ 배열 정렬하기 59

  • ¡ 배열에 값이 있는지 확인하기 60

    ¡ 배열에 값을 추가하기 61

    ¡ 배열에서 마지막 값을 추출하기 62

    ¡ 배열에서 임의의 값을 가져오기 62

    ¡ 배열을 랜덤하게 섞는다 63

    ¡ 배열의 값을 합산 63

    PHP 함수(Functions) 64

    ¡ 함수란? 64

    ¡ PHP 내장함수 65

    ¡ PHP 사용자 정의 함수 65

    PHP Class 68

    ¡ class란? 68

    ¡ 예제로 보는 class 68

    PHP Superglobal 변수들 70

    ¡ Superglobal 변수란? 70

    ¡ $GLOBALS 변수 70

    ¡ $_GET 변수 72

    ¡ $_POST 변수 73

    ¡ $_FILES 변수 74

    ¡ $_COOKIE 변수 77

    ¡ $_SESSION 변수 78

    ¡ $_REQUEST 변수 81

    PHP Forms 83

    ¡ Form에 대한 이해 83

    ¡ GET 83

    ¡ POST 84

    ¡ GET Form 예제 84

    ¡ POST Form 예제 85

    ¡ Form Validation 87

    ¡ Client Side Form Validation 88

    ¡ Server Side Form Validation 92

    ¡ Form Data 보안 94

    PHP Filters 97

  • ¡ Filter란? 97

    ¡ 예제로 Filter 배우기 97

    PHP 파일에 다른 PHP 포함 103

    ¡ include, require 103

    ¡ include 기본 예제 103

    ¡ include 중복 시 에러 예제와 해결방법 106

    PHP 날짜, 시간 다루기 109

    ¡ date() 함수를 사용하여 날짜 시간 다루기 109

    ¡ Time Zone 다루기 112

    ¡ mktime()으로 날짜 시간 다루기 113

    PHP File 다루기 115

    ¡ 서버에 파일 읽고 쓰기 115

    PHP MySQL Database 118

    ¡ PHP Database 118

    ¡ MySQLi vs PDO 118

    ¡ MySQL 준비 – phpMyAdmin 119

    ¡ MySQL에 연결하기 140

    ¡ MySQL 데이터 읽기 - SELECT 142

    ¡ MySQL 데이터 읽기 개수 제한하기 - LIMIT 144

    ¡ MySQL 데이터 정렬 순서 – ORDER BY 145

    ¡ MySQL 데이터 검색 조건 – WHERE 146

    ¡ MySQL 데이터 삽입하기 – INSERT INTO 148

    ¡ MySQL 데이터 수정하기 – UPDATE 151

    ¡ MySQL 데이터 삭제하기 – DELETE 156

    ¡ MySQL DB 보안 158

    ¡ MySQL DB 추가 정보 162

    PHP 그래픽(GD) 163

    ¡ GD란? 163

    ¡ GD로 이미지 생성하기 163

    ¡ 존재하는 이미지 불러 작업하기 164

    ¡ 두 개의 이미지 합치기 166

    ¡ 이미지 크기 변경하여 저장하기 168

    ¡ 썸네일 함수 만들기 170

  • ¡ 그래픽 관련 함수 173

    ¡ 막대그래프 그리기 예제 175

    PHP XML 178

    ¡ XML이란? 178

    ¡ 뉴스 rss 읽어서 출력하기(네이버 뉴스 예) 184

    PHP JSON 187

    ¡ JSON이란? 187

    ¡ 배열을 JSON으로 변환 187

    ¡ XML을 JSON으로 변환 188

    ¡ DB 테이블을 JSON으로 변환 189

    ¡ JSON을 배열으로 변환 190

    PHP AJAX 191

    ¡ AJAX란? 191

    ¡ Email 중복 여부 확인 예제 191

    ¡ 추천 검색어 보여주기 예제 196

    [부록] PHP MVC 199

    PHP MVC Part 1 200

    ¡ MVC란 무엇인가? 200

    ¡ MVC 프로그래밍 준비 201

    ¡ url 정책 설정(.htaccess) 202

    ¡ index.php 203

    ¡ application\config\config.php 203

    ¡ application\libs\application.php 204

    ¡ 콘트롤러 엔진 application\libs\controller.php 213

    ¡ 첫 번째 콘트롤러 만들기 213

    ¡ mvc 실행 테스트 217

    ¡ 추가적인 파일 생성 및 저장 218

    PHP MVC Part 2 227

    ¡ 데이터베이스 준비 227

    ¡ model 파일 만들기 236

    ¡ board 콘트롤러 수정하기 239

    ¡ view 파일 수정하기 242

    PHP MVC Part 3 246

  • ¡ application\views\board\index.php 수정 246

    ¡ application\controller\board.php 수정 248

    ¡ view 파일들을 수정 및 추가 253

    ¡ model 파일 수정 255

    [부록] Laravel 활용 Todo App 만들기 260

    What is Laravel? 261

    Laravel 설치 262

    ¡ Before Laravel Install 262

    ¡ Laravel Install 263

    ¡ Laravel 환경설정 270

    ¡ MySql DB 준비 271

    첫 페이지 수정하기 273

    ¡ 첫 페이지는 어떻게 표시되는가? 273

    ¡ 첫 페이지 내용 수정 연습 274

    ¡ 새로운 view 파일 생성하여 연결하기 275

    에러 방지용 설정 변경 (5.4 버전 이상, MariaDB를 사용하는 환경에서) 277

    ¡ migration 실행 시 발생하는 에러 277

    ¡ 에러 해결 방법 278

    ¡ DB 초기화 하기 280

    Todo App 만들기 283

    ¡ Todo App이란? 283

    ¡ tasks 테이블 만들기 283

    ¡ Auth로 인증 만들기 286

    ¡ Model 생성하기 286

    ¡ Model들 간의 관계 설정하기 287

    ¡ Controller 생성하기 289

    ¡ Routing 설정하기 292

    ¡ 메인 페이지 설정 296

    ¡ 사용자 추가하기 305

    ¡ 할 일 추가 완성하기 306

    ¡ 할 일 삭제 처리하기 309

    ¡ 수정 처리하기 311

    ¡ 추가 설명 : {{ csrf_field() }} 315

  • [머리말]PHP는 서버 측면에서 웹 페이지를 생성하고 서버의 자원을 처리하는 프로그래밍

    언어이다. HTML, CSS, JavaScript가 클라이언트 측면에서 사용자의 브라우저에서

    작동하는 반면 PHP는 서버에서 작동하며 처리결과를 사용자에게 전송하거나 서버

    내에서 작업을 수행한다.

    웹은 기본적으로 웹 서버 환경에도 작동하며 사용자에게 페이지를 전송하므로 서

    버의 자원들 예를 들면 데이터베이스나 디스크, 파일들을 다루는 작업이 필하다.

    PHP는 이러한 작업을 처리해주는 서버측 언어중 하나이며 현 상태에서는 가장 점

    유율이 높은 언어이다.

    PHP는 Java나 C와 같은 언어에 비해 프로그래밍 언어로서의 완결성이 떨어진다고

    가치를 낮게 보는 경향도 있지만 PHP는 수많은 Open Source들과 함께 여전히 높

    은 점유율을 자랑하고 있다. 또한 웹의 인기가 높아지는 시점에 PHP의 공헌은 지

    대한 것이어서 포털사이트를 비롯해서 초창기 웹의 수많은 페이지들이 PHP로 제

    작되었다.

    본 교재에서는 PHP의 기본적인 개념과 사용법을 설명한다. 또한 웹 개발에서 가

    장 중요한 요소 중 하나인 데이터베이스를 위해 PHP와 가장 많이 사용되는

    MySQL을 설명한다.

    후반부서는 최근에 가장 많이 사용되는 프로그래밍 아키텍쳐인 MVC 제작과

    Open Soirce MVC Framework 중 가장 많이 사용되는 Laravel을 활용해 간단한 어

    플리케이션을 제작하는 방법을 설명한다.

    초보자를 위한 교재인만큼 지나치게 복잡한 내용은 제외하였지만 PHP를 처음 배

    우려는 초보자가 알아야 할 내용들은 대부분 담았다.

    많은 분들에게 도움이 되길 바란다.

    2018년 2월 유승열

  • PHP_Web_Programming(유승열).hwp 9

    PHP란?

    ¡ PHP = "PHP: Hypertext Preprocessor”

    ¡ 가장 많이 사용되는 웹용 서버 사이드 스크립트 언어 중

    하나

    Ÿ 서버 사이드: 서버에서 실행되는 언어 – PHP, JAVA, C, C#.NET...

    Ÿ 클라이언트 사이드: 브라우저에서 실행되는 언어 – HTML, CSS, JavaScript

    ¡ 많은 Open Source 들이 PHP로 개발되었다.

    ¡ Wordpress, xpressengine, zoomla, drupan, phpBB 등

    ¡ PHP는 많은 데이터베이스를 지원한다.

    Ÿ Oracle, Sybase, Solid, PostgreSQL, Generic ODBC 등

    Ÿ http://phplens.com/adodb/supported.databases.html

    ¡ PHP는 무료

    ¡ PHP는 다양한 플랫폼을 지원 F Windows, Linux, Unix 등

    ¡ PHP는 Apache, IIS등 대부분의 웹서버 S/W와 호환됨

    ¡ PHP 공식사이트 – http://php.net/

    ¡ PHP 최신버전 – 7.2.0 (2017.12월 현재)

  • PHP_Web_Programming(유승열).hwp 10

    Windows에서 PHP 사용

    ¡ PC에서 PHP를 사용하는 방법

    Ÿ php.net에서 다운로드하여 Windows용 PHP 설치

    F http://php.net/downloads.php 접속 후 버전 선택하여 Windows Downloads에서 다운로드

    및 설치가능

    Ÿ XAMPP: Apache, MySql, PHP를 한 번에 설치

    F https://www.apachefriends.org 접속하여 최신 XAMPP Windows용 설치

    Ÿ WAMPP: Windows용 Apache, MySql, PHP 한 번에 설치

    F http://www.wampserver.com/en/ 접속하여 최신 버전의 WAMPP 설치

  • PHP_Web_Programming(유승열).hwp 11

    ¡ XAMPP 프로그램 다운로드

    이 교재에서는 위 세가지 방법 중 XAMPP를 사용

    Ÿ https://www.apachefriends.org 접속

    Ÿ XAMPP for Windows 클릭하여 다운로드(7.2.0)

    F XAMPP 버전은 포함된 PHP 버전과 동일

    ¡ 프로그램 설치

    Ÿ 다운로드 폴더에서 xampp-win32-7.2.0-0-VC15-installer.exe 더블클릭

    F 64bit 컴퓨터에서 아래와 같은 경고 만나면 무시하고 [OK] 클릭하여 진행

  • PHP_Web_Programming(유승열).hwp 12

    Ÿ Next 버튼 누르며 계속 진행하여 설치 완료

  • PHP_Web_Programming(유승열).hwp 13

    Ÿ 설치 종료 화면에서 Do you want to start the control Panel now? 체크하고

    Finish 누르면 XAMPP Control Panel 실행

    F 최초로 XAMPP Control Panel 실행 시 그림과 같이 언어 환경 설정을 하는데 왼쪽 깃발 아

    래 체크하고 Save 버튼 누르면 영어로 셋팅되고 다음부터는 묻지 않음.

    ¡ XAMPP 실행

    Ÿ 최초 설치 후에는 자동으로 XAMPP Control Panel이 실행됨

    Ÿ 나중에 실행할 때는 C:\xampp 폴더를 탐색기로 열어서 xampp_control.exe를

    더블 클릭해 직접 실행해 줘야 함.

  • PHP_Web_Programming(유승열).hwp 14

    ¡ XAMPP 서비스들

    Ÿ Apache : Web Server 소프트웨어

    Ÿ MySql : MySql 데이터베이스

    F 이 버전에 실제 설치된 것은 MariaDB이나 MySql과 같음

  • PHP_Web_Programming(유승열).hwp 15

    Ÿ FileZilla : FTP 서버(이 서버 컴퓨터에 파일을 업로드 할 수 있게 해줌)

    Ÿ Mercury : 메일 서버(로컬 컴퓨터에서 메일 전송할 수 있게 해줌)

    Ÿ Tomcat : 서버에서 Java를 사용할 수 있도록 해주는 S/W(JavaScript 아님)

    ¡ Apache, MySql 실행

    Ÿ 이 학습자료에서는 웹서버를 실행하여 웹서비스를 테스트하고 PHP와 MySql을

    사용할 것이므로 Apache와 MySql 옆의 Start 버튼을 클릭

    F Apache와 MySql을 Start 해서 버튼이 Stop으로 바뀌어 있다.

    F PHP는 Apache와 연결되어 있어 Apache를 실행하면 자동으로 실행됨.

    ¡ 컴퓨터 부팅시 Apache, MySql 자동 실행하기

    Ÿ 매 번 xampp_controll.exe를 실행해서 XAMPP Controll Panel을 열지 않고도

    컴퓨터를 켜면 바로 Apache와 MySql을 실행하는 방법

  • PHP_Web_Programming(유승열).hwp 16

    Ÿ Windows 탐색기에서 c:\xampp 폴더를 연다.

    Ÿ xampp_control.exe 파일 위에서 마우스 오른쪽 버튼을 누른다.

    Ÿ 아래와 같이 XAMPP Control Panel 각 서비스 앞에 빨간색 X 버튼이 표시된다.

    Ÿ Apache와 MySql 앞의 X 버튼을 클릭하면 아래와 같이 경고창이 표시된다. Yes

  • PHP_Web_Programming(유승열).hwp 17

    를 클릭하면 이제 X 버튼이 녹색 체크 버튼으로 바뀌면서 Windows 서비스에

    등록된다. 그리고 Apache와 MySql을 Start 해주자.

    Ÿ 이제 Apache와 MySql은 컴퓨터를 껐다 켜도 자동으로 실행된다.

    ¡ 웹사이트 확인

    Ÿ http://localhost/ 또는 http://127.0.0.1 주소로 웹사이트 확인

    Ÿ 또는 아래와 같이 XAMPP Control Panel의 Admin 버튼 눌러 브라우저 열기

    (Window 기본 브라우저에 dashboard 페이지가 열림)

    F 이는 c:\xampp\htdocs 폴더의 index.php에 dashboard로 리다이렉션(페이지 이동)되도록

    설정되어 있어서 그런 것임.

  • PHP_Web_Programming(유승열).hwp 18

    Ÿ dashboard 없애기

    실제 PHP를 배우는데 위 dashboard는 필요 없으므로 c:\xampp\htdocs에 들어

    가서 모든 파일을 지우면 됨.

    위와 같이 c:\xampp\htdocs 내의 모든 파일을 제거하고 다시 http://localhost/

    또는 http://127.0.0.1 주소로 웹사이트를 확인하거나 또는 XAMPP Control Panel

    의 Admin 버튼 눌러 브라우저 열어 보면 다음과 같이 빈 폴더(디렉토리)의 내용을

    보여주는 화면만 표시된다.

  • PHP_Web_Programming(유승열).hwp 19

    ¡ MySql 확인

    Ÿ MySql은 phpmyadmin이라는 php로 제작된 관리 프로그램을 통해 확인할 수

    있다.

    Ÿ 주소 창에서 http://localhost/phpmyadmin 또는 http://127.0.0.1/phpmyadmin

    을 열거나 아래 그림과 같이 XAMPP Control Panel의 MySql 의 Admin 버튼을

    클릭해 phpmyadmin을 연다.

    Ÿ 아래와 같이 phpmyadmin이 열린 것을 확인한다.

    F MySql에 대한 상세한 사항은 MySql에 대해 공부할 때 다시 설명한다.

  • PHP_Web_Programming(유승열).hwp 20

    Scripting Tools

    ¡ PHP와 같은 Script 언어를 코딩하는데 사용하는 도구들

    Ÿ IDE – PHP 또는 웹 통합개발환경(Integrated Development Environment)

    ① PHPStorm

    ① Netbeans

    ② Aptana Studio

    ③ Eclipse

    Ÿ Code Editors

    ④ Sublime Text

    ⑤ Visual Studio Code

    ⑥ Atom

    ⑦ Notepad++

    ⑧ Coda

    ⑨ Brackets

    ⑩ SlickEdit

    ⑪ jEdit

    ⑫ Programmer’s Notepad

    ⑬ Komodo Edit

    ⑭ RJ TextEd

    ⑮ Editplus

    ⑯ UltraEdit

    Ÿ WEB IDE – 웹기반 PHP 또는 웹 통합개발환경(Cloud 기반)

    ① Codeanywhere

    ② c9.io

    ③ codenvy.io

    ④ shiftedit

  • PHP_Web_Programming(유승열).hwp 21

    Web Server 환경 이해

    ¡ DocumentRoot

    Ÿ DocumentRoot란 웹 서버의 웹 문서가 저장되는 위치를 말함

    Ÿ 이 설정은 Apache의 환경 설정 파일에 있음

    Ÿ C:\xampp\apache\conf\httpd.conf 파일을 메모장에서 열면 다음 줄이 있음

    DocumentRoot�"C:/xampp/htdocs"

    Ÿ 만일 웹 문서 저장 위치를 바꾸고 싶으면 위 줄에서 따옴표("") 안의 폴더(디렉

    토리)를 바꾸고 저장한 후 Apache를 Stop 후 다시 Start 해주면 됨.

    ¡ DirectoryIndex

    Ÿ DirectoryIndex란 웹 주소 요청에서 파일명 대신 디렉토리가 요청되었을 때 자

    동으로 실행해야 할 파일을 말한다.

    Ÿ 예를 들어 http://localhost/about.php 와 같이 접근하지 않고 http://localhost/

    또는 http://localhost/about 과 같이 요청했다면 이는 htdocs 폴더의 디렉토리

    또는 htdocs 폴더 아래의 about 폴더에 파일명 지정 없이 접근한 것이다. 이

    경우 Apache는 자동으로 보여줄 파일에 대한 설정을 가지고 있는데 바로

    DirectoryIndex이다.

    Ÿ DirectoryIndex는 httpd.conf 파일 안에 다음과 같이 설정되어 있다.

    DirectoryIndex�index.php�index.pl�index.cgi�index.asp�index.shtml�index.html...

    Ÿ 위의 설정을 보면 디렉토리에 접근했을 때 처음으로 index.php를 찾고 없으면

    다음으로 index.pl, index.cgi... 순으로 파일을 찾아서 열게 된다. 만일 이 목록에

    있는 파일이 하나도 없으면 설정에 따라 파일 목록을 그대로 보여주거나 디렉

    토리 읽기가 차단된 경우 이를 읽을 수 없다는 에러를 표시한다.

  • PHP_Web_Programming(유승열).hwp 22

    PHP "Hello World!”

    ¡ Hello World 출력하기

    Ÿ c:\xampp\htdocs\index.php 작성 후 http://localhost 열기

    �Hello�World

    또는

  • PHP_Web_Programming(유승열).hwp 23

    PHP 기본 문법(syntax)

    ¡

    Ÿ PHP 코드는 사이에 들어간다.

    Ÿ PHP 코드로만 끝날 경우에는 닫는 태그 ?>는 생략해도 된다.

  • PHP_Web_Programming(유승열).hwp 24

    ¡ 주석

    Ÿ 한 줄 주석 : // 다음의 한 줄 구문은 실행되지 않고 주석이 됨

  • PHP_Web_Programming(유승열).hwp 25

    PHP 변수(Variables)

    ¡ 변수(Variables)란?

    Ÿ 변수(Variables)는 어떤 정보를 저장하는 저장소 역할을 한다.

    Ÿ PHP에서 변수는 항상 $ 기호로 시작한다.

    Ÿ $다음에 오는 변수의 첫 글자는 알파벳 문자 또는 _로만 시작할 수 있다.

    Ÿ PHP에서 변수 이름에는 알파벳, 숫자, _ 만 사용할 수 있다.

  • PHP_Web_Programming(유승열).hwp 26

    ���echo�$name�.�"의�나이는�”�.�$age�.�"입니다.”;�//홍길동의�나이는�30입니다.

    ���$a�=�100;

    ���$b�=�50;

    ���echo�$a�+�$b;�//150

    ���print�$a�*�$b;�//5000

    ?>

    ¡ 변수에서 데이터 타입(Type)

    Ÿ PHP는 변수를 선언할 때 데이터 타입을 지정하지 않고 대입된 값에 따라 자동

    으로 변환한다.

  • PHP_Web_Programming(유승열).hwp 27

    ���echo�$y;

    ?>

    Ÿ 위 코드를 실행시키면 아래와 같은 에러 메시지를 표시한다.

    먼저 첫 번째 에러부터 보자. "Undefined variable: x”는 변수 x를 찾을 수 없다는 메시지이다.

    이미 $x = 2;와 같이 하여 전역변수를 정의했는데도 에러메시지를 표시하는 것이다.

    이는 함수 안에서 전역변수에 그냥 접근할 수 없도록 하는 PHP의 특징 때문이다.

    JavaScript의 경우에는 그냥 바로 전역변수에 접근하지만 PHP는 함수 안에서 전역변수에 접근하

    기 위해서는 global 이라는 키워드를 사용해야 한다.

    위 코드가 에러를 발생시키지 않게 하려면 다음과 같이 고쳐야 한다.

    위의 코드로 함수 mytest 안에서 전역변수 $x에 접근하는 것은 가능케 하였다.

    그러나 여전히 함수 안의 $y는 접근이 되지 않아서 에러가 발생한다.

  • PHP_Web_Programming(유승열).hwp 28

    함수 안의 지역변수는 함수 호출에 의해 실행이 되고나면 사라지기 때문이다.

    다음과 같은 코드는 지역변수의 값을 함수가 반환해주어 이를 새로운 전역변수로

    만들어주는 예제이다. 그렇다고 해서 지역변수가 전역변수로 바뀌는 것은 아니며

    다만 함수의 반환 값을 새로운 변수로 정의할 뿐이다.

    아래 예제에서 함수 안의 $y와 함수를 호출한 값을 할당한 루트 영역의 $y는 전혀

    다른 변수인 셈이다. 함수에 대해서는 함수 편에서 자세히 설명하기로 한다.

    Ÿ 함수 안에서 전역변수에 접근하는 또 다른 방법 - $GLOBALS[‘변수명’]

    Ÿ Static

    예를 들어 함수 안의 변수는 Local 변수이므로 함수가 실행되고 나면 메모리에서 사라진다.

    아래 예를 보자.

  • PHP_Web_Programming(유승열).hwp 29

    plus_count();�//1

    plus_count();�//1

    plus_count();�//1

    plus_count();�//1

    ?>

    함수 plus_count() 안의 $count는 지역변수이므로 함수 안에서 실행되고 소멸된다.

    함수를 호출할 때마다 $count = 0 으로 초기회되므로 100번을 실행해도 $count

    는 1이된다. 그러나 때로는 함수 안의 값이 소멸되지 않고 유지되어야 할 때가 있

    다. 이 때 사용하는 키워드가 STATIC이다. 다음과 같이 수정하고 실행해보자.

    함수 안의 $count 변수 앞에 STATIC만 붙였는데 $count가 소멸되지 않고 유지되

    어 함수를 호출할 때마다 값이 1씩 증가되어 출력된다.

    ¡ 변수 설정 여부 확인 및 제거 - isset(), unset(), empty()

    Ÿ isset() : 변수가 설정되어 있는지 확인

    아래의 예제는 설정되지 않은 변수에 접근하려고 할 때 에러가 발생하는 예제이다.

    위와 같은 에러가 발생하지 않게 하려면 변수가 설정되어 있는지 검사해야 한다. 이 때 사용하는

  • PHP_Web_Programming(유승열).hwp 30

    함수가 isset()이고 다음과 같이 사용하면 에러를 방지할 수 있다.

    Ÿ unset() : 설정된 변수를 제거

    아래의 예제는 설정된 변수를 제거하고 결과를 확인하는 예제이다. 첫 줄에 $x=2

    와 같이 변수가 설정되었지만 다음 줄에 unset($x)로 $x를 제거하였기 때문에 변

    수가 설정되지 않았다고 판단하게 된다.

    변수를 제거하기 위해서 unset($x)을 사용하는 대신에 null 값을 $x에 대입해도 된

    다. 아래는 그 예제이다.

  • PHP_Web_Programming(유승열).hwp 31

    �}

    ?>

    Ÿ empty() : 변수가 비어 있는지 확인

    변수가 비어 있다는 것은 설정되지 않았다는 것은 아니고 다음의 값 중 하나를 가질 때에 해당

    ① "" (빈 문자열)

    ② 0 (정수 0)

    ③ "0" (문자열 0)

    ④ NULL

    ⑤ FALSE

    ⑥ array() (빈 배열)

    ⑦ var $var; (클래스 안에서 값없이 선언된 변수)

    F 참조: http://php.net/manual/kr/function.empty.php

  • PHP_Web_Programming(유승열).hwp 32

    PHP 상수(Constants)

    ¡ 상수(Constants)란?

    Ÿ 상수는 변수와 같이 값을 저장하는 저장소 역할을 한다.

    Ÿ 상수와 변수의 가장 큰 차이는 상수는 한 번 정의하면 스크립트에서 나중에 값

    을 변경할 수 없다. 반면 변수는 나중에 값을 변경할 수 있다.

    Ÿ 상수 이름은 $ 부호를 사용하지 않는다.

    Ÿ 상수는 변수와 다르게 스크립트 내에서 전역(Global)의 유효범위을 갖는다.

    F 즉, 함수 또는 클래스 안에서 별도의 global 키워드 없이도 접근 가능하다.

    Ÿ 상수이름은 대개 대문자로 정의한다.

    Ÿ 상수의 선언은 define 함수를 사용한다.

    define(name,�value,�case-insensitive)

    F name : 상수이름(대문자)

    F value : 상수 값(문자열 또는 숫자 등의 PHP 값)

    F case_insensitive : 대소문자 무시(기본 값은 false), 이 값이 true이면 상수 이름 대소문자 무

    시하고 사용 가능

    Ÿ 상수를 사용하는 경우는 대개 어플리케이션의 환경설정(config)을 위한 값을

    저장할 때 주로 사용한다. 다음은 상수 사용 예제이다.

  • PHP_Web_Programming(유승열).hwp 33

    function�get_my_home()�{

    �echo�HOME;�//함수�안에서�상수에�접근�가능

    }

    get_my_home();�//http://localhost/

    ?>

    ¡ PHP 마법 상수

    Ÿ PHP는 많은 미리 정의된 상수들(predefined constants)을 제공한다.

    Ÿ 그 중에서도 php.net이 magical 상수라고 소개하는 9개의 상수들을 소개한다.

    상수이름 설명

    __LINE__ 이 상수가 사용된 라인 넘버

    __FILE__현재 파일의 전체 경로와 파일명을 반환. 만일 이 상수가 include된 파

    일 내부에 사용되었다면 include된 그 파일의 이름을 반환한다.

    __DIR__

    현재 파일의 디렉토리(폴더) 반환. 만일 이 상수가 include된 파일 내부

    에서 사용되었다면 include된 파일의 디렉토리가 반환된다. 이 상수는

    dirname(__FILE__)과 같다.

    __FUNCTION__ 함수 이름을 반환

    __CLASS__ 클래스 이름을 반환.

    __TRAIT__ trait 이름을 반환

    __METHOD__ 메서드 네임을 반환

    __NAMESPACE__ 현재 네임스페이스의 이름을 반환

    ClassName::class 클래스 네임을 반환

    출처: http://php.net/manual/en/language.constants.predefined.php

  • PHP_Web_Programming(유승열).hwp 34

    Ÿ 마법 상수 예제

  • PHP_Web_Programming(유승열).hwp 35

    PHP Data Types

    ¡ PHP에서 지원하는 Data Type들

    Ÿ PHP는 다음과 같은 데이터 형식들을 지원한다.

    ① String - 문자열

    ② Integer - 정수형

    ③ Float - 소수점이 있는 수, double이라고도 함

    ④ Boolean - TRUE 또는 FALSE

    ⑤ Array - 배열

    ⑥ Object - 객체

    ⑦ NULL – 값이 없는 변수(빈 값과는 다름)

    ⑧ Resource – 특수한 형태의 데이터

    ¡ PHP Data Type 확인

    앞에서 설명한 것처럼 PHP는 변수를 선언할 때 데이터 타입을 선언하지 않는다.

    즉, 어떤 데이터가 변수에 대입되었는지에 따라 데이터 타입이 변경된다. 다음 예

    제는 var_dump() 함수로 데이터 타입과 값을 출력해서 확인하는 예제이다.

  • PHP_Web_Programming(유승열).hwp 36

    ��return�"Hello�$name";

    �}

    }

    $g�=�new�Greetings();

    echo�$g->say("kim");�//Hello�kim

    var_dump($g);�//object(Greetings)#1�(0)�{�}

    ?>

  • PHP_Web_Programming(유승열).hwp 37

    PHP String(문자열)

    ¡ 문자열(String)이란?

    Ÿ 문자열이란 문자들이 나열된 것을 말한다.

    Ÿ 문자열은 하나의 문자 이상으로 이루어져 있다.

    F 예) "Hello World!”

    Ÿ 문자열은 따옴표( ” 또는 ’ )로 둘러 싸서 표현한다.

    Ÿ 문자열 사용 예제

  • PHP_Web_Programming(유승열).hwp 38

    echo�"

    {$name}님�문자열�안에�{�}�기호�넣어서�변수�넣기�입니다.

    ";

    $g�=�5;

    $e�=�2;

    echo�"

    큰�따옴표에서�문자열�안에�수식�넣기�$g-$e

    ";

    //작은�따옴표�안에서는�변수를�사용할�수�없음.

    echo�'

    작은�따옴표에서�문자열�안에�수식�넣기�$g-$e

    ';�//변수명이�그대로�표시됨.

    //아래와�같이�작은�따옴표를�사용할�때는�문자열�합치기로�수식을�표현할�수�있으나�()로�묶어야�에러가�

    나지�않음.�

    echo�'

    작은�따옴표를�사용하고�문자열�합치기로�수식�넣기'�.�$g-$e�.�'

    ';

    echo�'

    작은�따옴표를�사용하고�문자열�합치기로�수식�넣기'�.�($g-$e)�.�'

    ';

    //문자열을�사용하는�또다른�방법�heredoc(히어닥)

    $hdoc��=�

  • PHP_Web_Programming(유승열).hwp 39

    Ÿ 문자열의 숫자 변환

    JavaScript에서는 1 + "1”은 "11”와 같이 덧셈에 대해서 문자열 합치기로 적용하지

    만 PHP는 숫자로 자동 변환하여 연산한다. 단 모든 문자열 안의 숫자가 자동변환

    되는 것은 아니다. 아래 예제는 문자열 안의 숫자가 어떻게 숫자형으로 변환되는

    지 보여주며 어떤 경우에 변환이 안되는지 문제를 해결하기 위해서는 어떻게 해야

    하는지 보여준다.

  • PHP_Web_Programming(유승열).hwp 40

    ¡ 문자열 관련 함수들

    Ÿ strlen - 문자열 길이 카운트

    Ÿ str_word_count() - 단어수 세기

    Ÿ strrev() - 문자들을 반대(역순)으로 표시

    F http://kvz.io/blog/2012/10/09/reverse-a-multibyte-string-in-php/ 참조

    Ÿ strpos() - 문자열의 위치 얻어내기

  • PHP_Web_Programming(유승열).hwp 41

    Ÿ str_replace() - 문자열 바꾸기(치환)

    Ÿ substr() - 문자열의 일부분 추출하기(게시판 제목 등 추출 시 활용)

    F string substr ( string $string , int $start [, int $length ] )

    F substr("문자열”, 시작위치, 개수)

    Ÿ trim(), ltrim(), rtrim() - 문자열 앞 뒤의 공백 제거

    F trim(" 문자열 ”) → "문자열”, ltrim(" 문자열 ”) → "문자열 ” ,rtrim(" 문자열 ”) → " 문자열”

    Ÿ strtolower(), strtoupper() - 영문자 소문자, 대문자 일괄 변환

    문자열 관련 레퍼런스 참조: http://php.net/manual/kr/ref.strings.php

  • PHP_Web_Programming(유승열).hwp 42

    PHP Operators(연산자)

    ¡ 연산자(Operator)란?

    Ÿ 연산자란 변수과 값들의 연산을 수행하기 위해 사용된다.

    Ÿ 연산자는 하나 이상의 값을 받아 다른 값을 산출한다.

    Ÿ 연산자의 종류

    ① 1항 연산자 : $n++, $n--, ! $a 와 같이 하나의 값에만 작용하는 연산자

    ② 2항 연산자 : $a = 1 과 같은 형식을 대부분의 연산자가 이에 해당

    ③ 3항 연산자 : $result = $total >= 100 ? true : false 형식

    ¡ 연산자 Types

    Ÿ 산술(계산) 연산자 - Arithmetic Operators

    Ÿ 증감 연산자 – Increment / Decrement Operators

    Ÿ 비교 연산자 - Comparison Operators

    Ÿ 대입 연산자 - Assignment Operators

    Ÿ 문자열 연산자 – String Operators

    Ÿ 논리(또는 관계) 연산자 - Logical (or Relational) Operators

    Ÿ 조건 연산자 - Conditional Operators

    Ÿ 배열 연산자 – Array Operators

    ¡ 산술(계산) 연산자

  • PHP_Web_Programming(유승열).hwp 43

    예제 이름 결과

    -$a 부정 $a의 반대.

    $a + $b 덧셈 $a와 $b의 합.

    $a - $b 뺄셈 $a와 $b의 차.

    $a * $b 곱셈 $a와 $b의 곱.

    $a / $b 나눗셈 $a와 $b의 몫.

    $a % $b 나머지 $a를 $b로 나눈 나머지.

    $a ** $b 나눗셈 $a의 $b제곱

    출처 : http://php.net/manual/kr/language.operators.arithmetic.php

    ¡ 증감 연산자

    예제 이름 효과

    ++$a 사전 증가 Pre-increment $a를 1 증가하고, $a를 반환.

    $a++ 사후 증가 Post-increment $a를 반환하고, $a를 1 증가.

    --$a 사전 감소 Pre-decrement $a를 1 감소하고, $a를 반환.

    $a-- 시후 감소 Post-decrement $a를 반환하고, $a를 1 감소.

    출처: http://php.net/manual/kr/language.operators.increment.php

    F 증감 연산자는 사전, 사후 관계가 존재한다. 위 표에서 보면 부호의 위치에 따라 증가/감소

    하고 반환하는지, 반환하고 증가/감소하는지가 다르다.

  • PHP_Web_Programming(유승열).hwp 44

    Ÿ 증감연산자 예제

    ¡ 비교 연산자

    Ÿ 비교연산자는 두 값을 비교할 수 있는 연산자이다.

    Ÿ 비교 연산자는 두 값의 비교 결과가 참이면 TRUE를 거짓이면 FALSE를 반환

    Ÿ 비교 연산자는 대부분의 조건문, 반복문에서 사용된다.

    Ÿ 비교연산자의 종류

    예제 설명 결과

    $a == $b 값이 같음 $a와 $b가 같으면 TRUE.

    $a === $b 값과 형식이 같음$a와 $b가 같고, 같은 자료형이면 TRUE. (PHP 4에서 추가)

    $a != $b 값이 같지 않음 $a가 $b와 같지 않으면 TRUE.

    $a $b 값이 같지 않음 $a가 $b와 같지 않으면 TRUE.

    $a !== $b 값과 형식이 같지 않음$a가 $b와 같지 않거나, 같은 자료형이 아니면 TRUE. (PHP 4에서 추가)

    $a $b 왼쪽이 오른쪽보다 큼 $a가 $b보다 크면 TRUE.

    $a = $b 왼쪽이 오른쪽보다 크거나 같음 $a가 $b보다 크거나 같으면 TRUE.

  • PHP_Web_Programming(유승열).hwp 45

    Ÿ 비교연산자 예제

    ¡ 대입(할당) 연산자

    Ÿ 대입 연산자는 = 를 사용해서 왼쪽에 오른쪽의 값을 대입(할당)하는 것으로 변

    수 또는 상수 등의 데이터를 할당하는데 가장 일반적으로 사용되는 연산자이

    다.

    예제 동일식 설명

    x = y x = y 왼쪽의 x에 오른쪽의 y 값을 할당한다

    x += y x = x + y 왼쪽의 원래 있던 x 값에 y 값을 더하여 x에 할당한다

    x -= y x = x - y 왼쪽의 원래 있던 x 값에 y 값을 빼서 x에 할당한다

    x *= y x = x * y 왼쪽의 원래 있던 x 값에 y 값을 곱해서 x에 할당한다

    x /= y x = x / y 왼쪽의 원래 있던 x 값에 y 값을 나누어서 x에 할당한다

    x %= y x = x % y 왼쪽의 원래 있던 x 값에 y 값을 나눈 나머지를 x에 할당한다

  • PHP_Web_Programming(유승열).hwp 46

    Ÿ 대입 연산자 예제

    ¡ 문자열 연산자

    Ÿ PHP는 문자열을 합칠 때 . 부호를 사용한다.

    Ÿ .= 부호를 사용하여 문자열을 계속 합쳐나갈 수 있다.

    예제 설명 비고

    $a . $b $a의 문자열과 $b의 문자열 합침

    $a .= $b $a의 문자열에 $b의 문자열을 합쳐 $a에 다시할당

  • PHP_Web_Programming(유승열).hwp 47

    예제 이름 결과

    $a and $b And $a와 $b가 모두 TRUE이면 TRUE.

    $a or $b Or $a나 $b가 TRUE이면 TRUE.

    $a xor $b Xor $a와 $b중 하나만 TRUE일 때만 TRUE.

    ! $a Not $a가 TRUE가 아니면 TRUE.

    $a && $b And $a와 $b가 모두 TRUE이면 TRUE.

    $a || $b Or $a나 $b가 TRUE이면 TRUE.

    출처: http://php.net/manual/kr/language.operators.logical.php

    ¡ 논리 연산자

    Ÿ 논리 연산자는 조건구문을 결합하는데 사용한다.

    Ÿ 예를 들어 조건 1과 조건 2를 모두 만족해야 하는지 하나만 만족하면 되는지

    등을 가리는데 사용하는 것이 논리연산자이다.

  • PHP_Web_Programming(유승열).hwp 48

    �echo�"
    회원임";�//둘�중�하나만�참

    }

    $memeber�=�TRUE;

    if(�$user�xor�$memeber�)�{

    �echo�"
    회원임";�//출력�안됨,�둘�다�TRUE이면�FALSE임

    }

    ?>

    ¡ 조건 연산자 = 3항 연산자

    Ÿ 조건 연산자는 3항 연산자라고도 하며 ? : 부호를 사용하여 조건에 따라 다른

    값을 대입하는 연산자이다.

  • PHP_Web_Programming(유승열).hwp 49

    PHP 조건문

    ¡ 조건문이란?

    Ÿ 조건문이란 어떤 조건에 부합하는지 아닌지에 따라 다른 명령을 수행하기 위

    한 일종의 의사결정을 위한 코드구조이다.

    Ÿ PHP에서 조건문은 if, if...else, if...elseif...else, switch 가 있다.

    Ÿ 조건문은 조건 뒤에 중괄호{ }로 실행할 구문을 묶는다. 단, 조건 뒤에 나오는

    구문이 한 줄이면 { }를 생략할 수 있다.

    ¡ if, if...else, if...elseif...else 예제

  • PHP_Web_Programming(유승열).hwp 50

    }�else�{

    �echo�"자유시간입니다.";�//만일�위�시간�조건에�없으면�"자유시간입니다."�출력

    }

    ¡ switch 예제

    $w=date("w");�//요일의�숫자�표현,�0(일요일)에서�6(토요일)

    switch�($w)�{

    �case�0:

    ��echo�"일요일";

    ��break;

    �case�1:

    ��echo�"월요일";

    ��break;

    �case�2:

    ��echo�"화요일";

    ��break;

    �case�3:

    ��echo�"수요일";

    ��break;

    �case�4:

    ��echo�"목요일";

    ��break;

    �case�5:

    ��echo�"금요일";

    ��break;

    �case�6:

    ��echo�"토요일";

    ��break;

    �default:

    ��echo�"알�수�없는�요일";

    }

    ?>

  • PHP_Web_Programming(유승열).hwp 51

    PHP 반복문(Loop)

    ¡ 반복문이란?

    Ÿ 반복문이란 특정 조건 아래서 지정된 횟수 또는 조건이 만족할 때까지 동일한

    코드를 반복실행하도록 하는 구문이다.

    Ÿ PHP에는 for, while, do...while, foreach 등의 반복문이 있다.

    ① for – 조건에 정해진 시작 숫자로부터 시작해서 특정 숫자까지 반복

    ② while – 먼저 조건을 검색해서 조건을 만족하는 동안 반복

    ③ do....while – 먼저 실행하고 나서 조건을 만족하는지 나중에 검사하며 반복

    ④ foreach - 배열을 배열의 수만큼 반복하면서 하나씩 추출하여 처리

    ¡ for

    Ÿ 문법

    for�(expr1;�expr2;�expr3)�{

    ����statement

    }

    for�(expr1;�expr2;�expr3):

    ����statement

    endfor;

    F expr1 – 첫 번째 표현식(예; $i=0, $i를 0부터 시작하여 반복을 시작한다)

    F expr2 – 두 번째 표션식(예; $i

  • PHP_Web_Programming(유승열).hwp 52

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 53

    ¡ while

    Ÿ 문법

    while�(expr)

    ����statement

    }

    while�(expr):

    ����statement

    ����...

    endwhile;

    F expr – while문은 먼저 조건을 검색하고 조건이 만족할 때까지 반복함

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 54

    �}

    �$i++;

    endwhile;

    echo�$sum1;�//�2500

    echo�"
    ";

    echo�$sum2;�//�2550

    ?>

    ¡ do...while

    Ÿ 문법

    do�{

    ����statement

    }�while�(expr);

    F expr – do...while문은 while문과 거의 유사하지만 먼저 실행하고 나중에 조건을 확인하는

    순서상의 구조가 다름

    Ÿ 예제

    ¡ foreach

    Ÿ foreach는 배열의 각 요소들에 반복의 구조로 접근하는 것이다

    foreach�(array_expression�as�$value)�{

    ����statement

    }

    foreach�(array_expression�as�$key�=>�$value)�{

    ����statement

    }

  • PHP_Web_Programming(유승열).hwp 55

    F array_expression as $value : 배열의 각 요소들에 저장된 값을 $value로 반복적으로 추출

    F array_expression as $key => $value : 배열의 각 요소들에 저장된 값을 $key와 $value 변

    수로 반복적으로 추출해 냄. $key가 없는 경우에는 배열 번호가 $key가 된다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 56

    PHP 배열(Arrays)

    ¡ 배열이란?

    Ÿ 배열이란 쉽게 말해서 하나의 변수에 여러 개의 값을 가지는 것을 가리킨다.

    Ÿ 일반 변수는 $a = 1과 같이 하나의 값을 가지지만 배열은 $a[0]=1, $a[1]=2...또

    는 $a[‘mime’]="image/jpeg”, $a[‘width’]=60, $a[‘height’]=240 과 같이 변수의

    이름은 하나이지만 여러 값을 가진다.

    Ÿ 배열의 종류

    ① 숫자 정렬 배열(indexed array 또는 numeric array)

    ② 결합 정렬 배열(associative array)

    ③ 다차원 배열

    ¡ indexed array

    숫자로 배열을 정렬하는 방식이다. 값들은 연속된 번호로 저장되고 그 번호로 값

    에 접근할 수 있다. 숫자로 정렬한다고 해서 값으로 숫자만 가진다는 것은 아니다.

    여기서 말하는 숫자란 값을 저장하고 있는 배열의 주소를 말한다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 57

    ¡ associative array

    이 정렬은 배열의 값을 저장할 때 번호 대신 key 이름을 사용한다. 예를 들어 다음

    과 같은 방법이 그것이다.

    $a[‘mime’]="image/jpeg”, $a[‘width’]=60, $a[‘height’]=240

    key 이름을 사용한 배열은 $a[0]과 같이 접근할 수 없다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 58

    Ÿ 예제

    ¡ 배열 크기 구하기

    Ÿ sizeof()

  • PHP_Web_Programming(유승열).hwp 59

    ¡ 배열인지 확인하기Ÿ is_array()

    ¡ 배열 정렬하기

    PHP는 배열 값 또는 키 이름에 따라 정렬하는 함수들을 제공하는데 다음과 같다.

    Ÿ sort() - indexed array를 값의 오름차순으로 정렬한다.

    Ÿ rsort() - indexed array를 값의 내림차순으로 정렬한다.

    Ÿ asort() - associative array를 값의 오름차순으로 정렬한다.

    Ÿ ksort() - associative array를 키 이름의 오름차순으로 정렬한다.

    Ÿ arsort() - associative array를 값의 내림차순으로 정렬한다.

    Ÿ krsort() - associative array를 키 이름의 내림차순으로 정렬한다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 60

    //Array�(�[0]�=>�1�[1]�=>�2�[2]�=>�3�[3]�=>�4�[4]�=>�5�[5]�=>�6�[6]�=>�7�[7]�=>�8�)

    echo�"
    ";

    rsort($a);

    print_r($a);�

    //Array�(�[0]�=>�Melon�[1]�=>�Grape�[2]�=>�Cherry�[3]�=>�Banana�[4]�=>�Apple�)�

    echo�"
    ";

    rsort($b);

    print_r($b);�

    //Array�(�[0]�=>�8�[1]�=>�7�[2]�=>�6�[3]�=>�5�[4]�=>�4�[5]�=>�3�[6]�=>�2�[7]�=>�1�)�

    echo�"
    ";

    $c�=�array("jan"=>10,�"feb"=>30,�"apr"=>5,�"may"=>9,�"jun"=>21);

    asort($c);

    print_r($c);�

    //Array�(�[apr]�=>�5�[may]�=>�9�[jan]�=>�10�[jun]�=>�21�[feb]�=>�30�)�

    echo�"
    ";

    ksort($c);

    print_r($c);�

    //Array�(�[apr]�=>�5�[feb]�=>�30�[jan]�=>�10�[jun]�=>�21�[may]�=>�9�)�

    echo�"
    ";

    arsort($c);

    print_r($c);�

    //Array�(�[feb]�=>�30�[jun]�=>�21�[jan]�=>�10�[may]�=>�9�[apr]�=>�5�)

    echo�"
    ";

    krsort($c);

    print_r($c);�

    //Array�(�[may]�=>�9�[jun]�=>�21�[jan]�=>�10�[feb]�=>�30�[apr]�=>�5�)

    ?>

    ¡ 배열에 값이 있는지 확인하기

    Ÿ in_array()

    Ÿ bool in_array ( mixed $needle , array $haystack [, bool $strict ] )

    F mixed $needle : 찾을 값(문자열, 숫자 또는 배열일 수 있음)

    F array $haystack : 배열

    F bool $strict : 선택적, TRUE이면 자료형까지 일치하는 값을 찾는다

    F 이 함수를 실행했을 때 반환되는 값은 TRUE(값이 존재) 또는 FALSE(값이 없음)

  • PHP_Web_Programming(유승열).hwp 61

    Ÿ 예제

    ¡ 배열에 값을 추가하기

    Ÿ array_push()

    Ÿ int array_push ( array &$array , mixed $var [, mixed $... ] )

    F array &$array : 배열

    F mixed $var : 추가할 값. 쉼표(,)로 구분하여 여러 개의 값을 추가할 수 있다.

    F 이 함수 대신에 $a[] = "새로운값” 과 같은 방법으로도 값을 추가할 수 있다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 62

    ¡ 배열에서 마지막 값을 추출하기

    Ÿ array_pop()

    Ÿ mixed array_pop ( array &$array )

    F array &$array : 배열

    F 마지막 값을 추출한다. 추출한 값은 다른 변수에 저장할 수 있으며, 배열에서는 추출한 값

    이 제거된다. 만일 배열이 아니거나 마지막 값이 없으면 에러가 발생한다.

    Ÿ 예제

    ¡ 배열에서 임의의 값을 가져오기

    Ÿ array_rand()

    Ÿ mixed array_rand ( array $input [, int $num_req ] )

    F array $input : 배열

    F int $num_req : 가져올 원소의 수(지정하지 않으면 기본 값은 1이 됨)

    F 0부터 배열의 마지막 index 번호 사이의 임의의 번호를 반환한다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 63

    ¡ 배열을 랜덤하게 섞는다

    Ÿ array_shuffle()

    Ÿ bool shuffle ( array &$array )

    F array $input : 배열

    F 배열에 요소들의 순서를 임의로 뒤섞어 재배열한다.

    Ÿ 예제

    ¡ 배열의 값을 합산Ÿ array_sum()

    Ÿ number array_sum ( array $array )

    F array $input : 배열

    F 배열에 포함된 숫자들의 합을 구해 숫자로 반환한다.

    Ÿ 예제

    배열 함수 목록:

    http://php.net/manual/kr/book.array.php

    https://www.w3schools.com/php/php_arrays.asp

  • PHP_Web_Programming(유승열).hwp 64

    PHP 함수(Functions)

    ¡ 함수란?

    Ÿ 함수란 재사용 가능한 구문들의 블록(block)이다.

    Ÿ 함수는 페이지가 실행될 때 자동으로 실행되지는 않고 그 함수를 호출할 때만

    실행된다.

    Ÿ 함수는 호출되었을 때 블록 안의 구문들을 직접 실행하기도 하고 return 명령

    을 통해서 결과를 반환할 수도 있다.

    Ÿ 함수 기본 문법

    function�functionName([argument1],�[argument2],[....])�{

    //실행�코드;

    }

    F 함수 이름은 _ 또는 하나의 알파벳 문자로 시작할 수 있다. 함수 이름에는 _나 알파벳 그리

    고 숫자를 사용할 수 있으나 숫자로 시작할 수는 없다.

    F argument는 인수라고 부르며 함수가 전달 받는 값을 받는 변수이다. 인수는 선택적이며 코

    드 구성에 따라 받을 수도 받지 않을 수도 있다.

    F 인수는 예를 들어 function functionName( $val1, $val2 ) { ... } 와 같이 구성된 함수를 호

    출하려면 반드기 functionName("홍길동”, 100); 와 같이 호출해야 한다.

    F 만일, 인수에 function functionName( $val1="”, $val2=50 ) { ... } 와 같이 기본값을 주었다

    면 함수를 호출할 때 functionName(); 와 같이 반드시 값을 전달하지 않아도 된다.

    Ÿ PHP에서 사용 가능한 함수의 종류는 다음과 같다.

    ① PHP 내장함수 – PHP가 제공하는 함수로 1,000개 이상의 유용한 기능이 있다.

    ② 사용자 정의 함수 – 개발자가 작성하는 함수이다. 내장함수 또는 PHP 명령어 등과

    이름이 겹치지만 않으면 얼마든지 함수를 만들어 사용할 수 있다.

    ③ Method – 메서드는 Class 안에 포함된 함수를 말한다.

  • PHP_Web_Programming(유승열).hwp 65

    ¡ PHP 내장함수

    Ÿ PHP에 관해서 배우는 것들의 대부분이 함수에 관한 것이다. 내장함수 전체 레

    퍼런스(reference)는 다음의 목록에서 확인할 수 있다.

    F http://php.net/manual/kr/funcref.php

    ¡ PHP 사용자 정의 함수

    Ÿ 예제 1 – phpfunction1.php 기본함수

    Ÿ 예제 2 – phpfunction2.php 인수로 값을 전달 받기

  • PHP_Web_Programming(유승열).hwp 66

    Ÿ 예제 3 – phpfunction3.php 인수에 값을 전달하지 않았을 때

    Ÿ 예제 4 – phpfunction4.php 기본값이 있는 인수 사용

  • PHP_Web_Programming(유승열).hwp 67

    Ÿ 예제 5 – phpfunction5.php 값의 반환 및 활용

  • PHP_Web_Programming(유승열).hwp 68

    PHP Class

    ¡ class란?

    Ÿ 클래스는 객체지향형 프로그래밍을 위한 기본적인 데이터 형으로 변수, 상수,

    함수(클래스 안에서 함수는 메서드-method라 함)를 포함하는 하나의 프로그램

    객체를 말한다.

    Ÿ 예를 들어 자동차는 엔진, 브레이크, 에어컨 등등의 다양한 기능들과 색, 크기

    등등의 속성들의 집합이라고 할 때 자동차를 객체로 기능들을 메서드라 하고

    색, 크기 등을 속성(properties)이라고 한다.

    ¡ 예제로 보는 class

    Ÿ 다음의 간단한 예제로 class를 이해하고 자세한 내용은 객체지향 프로그래밍

    (OOP; Object Oriented Programming)을 설명할 기회가 있을 때 살펴기로 하

    자.

  • PHP_Web_Programming(유승열).hwp 69

  • PHP_Web_Programming(유승열).hwp 70

    PHP Superglobal 변수들

    ¡ Superglobal 변수란?

    Ÿ Superglobal 변수란 어디에서나(함수 내에서나 밖에서나 또는 어떤 위치에서

    도) 접근 가능한 변수를 말한다.

    Ÿ PHP Superglobal들

    ① $GLOBALS

    ② $_SERVER

    ③ $_GET

    ④ $_POST

    ⑤ $_FILES

    ⑥ $_COOKIE

    ⑦ $_SESSION

    ⑧ $_REQUEST

    ⑨ $_ENV

    ¡ $GLOBALS 변수

    Ÿ 함수 내부 등에서 전역(Global) 변수에 접속할 때 사용

    Ÿ 사용법 - $GLOBALS[‘변수명’]

    Ÿ 함수 내에서 전역변수에 접근하기 위해 global $var 와 같이 global 키워드를

    사용하는 대신 사용할 수 있음

  • PHP_Web_Programming(유승열).hwp 71

    F 변수 설명의 전역변수 부분과 같은 예제임

    ¡ $_SERVER 변수

    Ÿ $_SERVER 변수는 PHP의 Global 변수(Superglobal로도 불림)의 하나로 서버 및

    실행환경에 관련된 정보를 얻을 수 있는 변수이다.

    Ÿ $_SERVER 변수는 $_SERVER[‘속성이름’] 형식으로 접근가능하다.

    Ÿ 예제를 통해서 주요 $_SERVER 변수의 사용법을 알아보자.

  • PHP_Web_Programming(유승열).hwp 72

    //페이지에�접속한�클라이언트의�IP�주소를�반환

    echo�$_SERVER['REMOTE_ADDR']�.�"
    ";

    //출력�예,�127.0.0.1

    //현재�실행되고�있는�PHP�파일의�이름을�추출($_SERVER['PHP_SELF']와�유사)

    echo�$_SERVER['SCRIPT_NAME']�.�"
    ";

    //출력�예,�/php/server.php

    //현재�실행되고�있는�페이지에�대한�접근�주소

    //$_SERVER['PHP_SELF'],�$_SERVER['SCRIPT_NAME']과�다른�점은�

    //Parameter�정보를�포함하여�전체�주소를�반환한다는�것

    //예를�들어�http://127.0.0.1/php/server.php?page=1와�같이�접근했다면�

    //반환되는�값은�/php/server.php?page=1�이�됨

    echo�$_SERVER['REQUEST_URI']�.�"
    ";

    //출력�예,�/php/server.php?page=1

    ?>

    ¡ $_GET 변수

    Ÿ $_GET 변수는 URL Parameter를 통해서 전달된 변수를 저장하는 변수이다.

    F 예) http://localhost/index.php?page=1&search=web

    Ÿ 위 예와 같이 URL의 끝에 ?를 붙이고 name=value 형식으로 전달하며 하나의

    값이 아닌 두 개 이상의 name=value가 전달되게 하려면 & 기호로 구분하여

    계속 추가할 수 있다.

    Ÿ 위의 경우 $_GET 변수에는 page와 search를 key로 하는 두 개의 값이 저장되

    며 PHP에서 접근하려면 $_GET[‘page’], $_GET[‘search’]와 같이 한다.

    Ÿ $_GET 변수는 URL 뒤에 붙어서 전달되는 값들이므로 보안이 필요한 경우 즉,

    아이디와 패스워드 또는 개인정보 등의 정보를 전달할 때는 GET Method를 사

    용하지 않는 것이 좋다. 다음은 예제이다.

  • PHP_Web_Programming(유승열).hwp 73

    F isset() 함수는 변수가 정의되어 있는지를 검사한다. 만일 정의되지 않은 변수에 접근하면 에

    러가 발생하기 때문에 항상 검사하는 것이 좋다.

    ¡ $_POST 변수

    Ÿ $_POST 변수는 URL Parameter가 아닌 내부 전송 방식을 통해서 전달된 변수

    를 저장하는 변수이다.

    Ÿ $_POST는 주소 끝에 값을 붙이지 않기 때문에 GET 보다는 상대적으로 안전하

    지만 그 자체로 보안이 해결되는 것은 아니다.

    F 보안을 위해서는 SSL, token, injection 방어 등 다양한 조치를 해야 한다.

    Ÿ $_POST 값을 보내려면 HTML form에서 POST method를 사용해야 한다.

    Ÿ 전송된 값은 $_POST[‘userid’], $_POST[‘userpw’]와 같이 접근한다.

    Ÿ 예제 – form.html

    $_POST

    ��

    ���

    ����아이디

    ����

    ���

    ���

    ����패스워드

    ����

    ���

    ���로그인

    ��

  • PHP_Web_Programming(유승열).hwp 74

    Ÿ 예제 – login.php

  • PHP_Web_Programming(유승열).hwp 75

    의 O/S에서는 반드시 nobody에 대한 읽기 쓰기 권한을 부여해주어야 한다.

    F Windows Server에서는 폴더에서 마우스 오른쪽 버튼을 눌러 속성→보안탭에서 사용자를

    추가하고 권한을 설정할 수 있으며 Linux나 Unix 계열의 컴퓨터는 쉘에서 chmod 777

    webdir 과 같은 방식으로 쓰기 권한을 줄 수 있다.

    Ÿ $_FILES는 업로드된 파일에 접근하기 위해 다음과 같은 속성을 가진다.

    ① $_FILES['userfile']['name'] - 업로드된 파일의 오리지널 이름

    ② $_FILES['userfile']['type'] - 업로드된 파일의 mime 형식(예,image/gif)

    ③ $_FILES['userfile']['size'] - 업로드된 파일의 byte 단위 사이트

    ④ $_FILES['userfile']['tmp_name'] - 업로드된 파일이 임시로 저장된 이름

    ⑤ $_FILES['userfile']['error'] - 업로드 시 발생된 에러 코드

    Ÿ 파일을 업로드 하려면 HTML에서 type이 file인 input을 사용해야 한다.

    Ÿ 또한 업로드를 위한 form은 반드시 enctype="multipart/form-data" 속성을 가

    져야 한다. 이 속성이 빠져 있으면 업로드는 작동하지 않는다.

    F

    Ÿ 예제 – upform.html

    $_FILES

    ��

    ���

    ����패스워드

    ����

    ���

    ���파일전송

    ��

  • PHP_Web_Programming(유승열).hwp 76

    F upform.html에서 파일을 선택하고 전송하면 다음의 upload.php에 파일을 POST 방식으로

    전송한다.

    F upload가 성공하려면 반드시 업로드 경로가 생성되어 있어야 한다.

    Ÿ 예제 – upload.php

    F upform.html, upload.php가 저장된 위치에 uploads 폴더(디렉토리)를 생성한다.

    F 앞의 upfrom.html에서 sample.jpg를 선택하고 전송하면 다음의 코드가 실행되고 화면출력

    과 함께 실제로 파일이 전송된다.

  • PHP_Web_Programming(유승열).hwp 77

    ¡ $_COOKIE 변수

    Ÿ Cookie란 사용자의 컴퓨터에 저장되어 있는 값을 서버에서 사용하는 정보를

    말한다. 주로 간단한 정보를 저장하게 되는데 예를 들어 팝업창을 오늘 하루

    열지 않게 한다던지, 사용자의 아이디를 기억시킨다든지 하는데 사용된다.

    Ÿ Cookie는 PHP의 setcookie함수를 통해 생성되며 $_COOKIE는 이렇게 생성된

    쿠키에 접근하기 위한 변수이다.

    Ÿ 쿠키는 지정한 시간이 지나면 사용자 컴퓨터에서 삭제된다.

    F bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path =

    "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

    F setcookie()함수는 html 코드가 시작되기 이전에 실행되어야 한다.

    Ÿ 예제

  • PHP_Web_Programming(유승열).hwp 78

    Cookie

    Ÿ 브라우저에서 쿠키값 확인

    F 크롬의 경우 F12를 눌러 개발자 도구를 연 다음 Application 메뉴에서 Cookies 항목을 열어

    도메인 주소를 열면 다음과 같이 쿠키가 저장되었고 종료일이 표시되는 것을 확인할 수 있

    다.

    ¡ $_SESSION 변수

    Ÿ 서버에 저장된 SESSION 값들에 접근하는 변수

    Ÿ SESSION이란 서버에서 여러 페이지들 사이에 값을 유지하도록 저장하는 방법

    Ÿ 쿠키와는 다르게 세션은 사용자의 컴퓨터에 값을 저장하지 않고 서버에 저장

    Ÿ 세션은 주로 로그인 상태를 유지하거나 할 때 사용된다.

  • PHP_Web_Programming(유승열).hwp 79

    Ÿ 세션은 한 사람의 사용자에 대해 일대일로 서버에 매치된다. 여기서 한 사람이

    라는 것은 엄밀히 말하면 하나의 다른 브라우저라고도 할 수 있다. 예를 들어

    하나의 컴퓨터에서 Chrome으로 페이지를 열었을 때와 IE로 열었을 때 서로 다

    른 사용자로 간주된다는 것이다. 그래서 크롬에서 로그인 되었다 할지라도 IE

    에서 열면 로그인되지 않은 상태가 되는 것이다.

    Ÿ 세션은 기본적으로 일정 시간이 지나면 사라지고 또 브라우저를 닫으면 사라

    진다.

    Ÿ 다음은 세션 관련 주요 함수이다.

    ① session_start() - 세션을 시작(반드시 다른 요소들이 출력되기 전에 실행되어야 함)

    ② session_unset() - 모든 세션 변수들을 제거한다(세션은 남아 있고 데이터만 제거).

    ③ session_destroy() - 세션을 완전히 파괴한다.

    Ÿ $_SESSION을 사용하려면 반드시 문서의 처음에 session_start()가 실행되어 있

    어야 하며 세션을 제거하거나 파괴할 때도 반드시 session_start()가 실행되어

    있어야 한다.

    Ÿ session_start()가 실행되기 전에 공백문자, 빈줄이라도 앞에 출력이 있어서는

    안된다.

    Ÿ 예제 – index.php

    �$_SESSION

  • PHP_Web_Programming(유승열).hwp 80

    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    ��

    ��

    님�반갑습니다.

    ��

    로그아웃

    ����

    ��

    ��

    ���

    ����아이디

    ����

    ���

    ���

    ����패스워드

    ����

    ���

    ���로그인

    ��

    ��

    Ÿ 예제 – login.php

    F 위 화면에서 [email protected]를 아이디에 넣고 패스워드 123456을 입력한 후 [로그인] 버튼을

    누르면 다음 코드가 실행된다.

    F 다음 코드에서는 값이 일치하는지 확인한 후 일치하면 세션 ‘userid’에 아이디를 저장하고

    다시 index.php로 페이지를 redirect해준다.

  • PHP_Web_Programming(유승열).hwp 81

    �$userpw�=�$_POST['userpw'];

    }

    if(�$userid�==�"[email protected]"�&&�$userpw�=�"123456"�)�{

    �$_SESSION['userid']�=�$userid;

    }

    header("Location:�/");

    die();

    ?>

    F 로그인이 되고 다시 메인 페이지에 오면 로그인 되었는지 조건에 따라 로그인되었다는 메

    시지와 로그아웃 버튼이 보인다.

    Ÿ 예제 – logout.php

    F 위 코드가 실행되면 세션을 완전히 파괴해서 세션에 userid는 더 이상 존재하지 않게 된다.

    그리고 나서 index.php로 돌아가면 로그아웃 상태로 인식된다.

    ¡ $_REQUEST 변수

    Ÿ $_REQUEST 변수는 $_GET과 $_POST로 전송된 데이터와 $_COOKIE 데이터를

    다룰 수 있다.

    Ÿ 전문가들은 여러 가지 이유로 $_REQUEST를 사용하지 않는 것이 좋다고 권고

    한다. 대신에 $_GET, $_POST, $_COOKIE를 사용할 것을 권장하고 있다.

  • PHP_Web_Programming(유승열).hwp 82

    Ÿ 예제

    $_POST

    ��

  • PHP_Web_Programming(유승열).hwp 83

    PHP Forms

    ¡ Form에 대한 이해

    Ÿ 앞에서 $_GET, $_POST, $_FILES 등을 다루면서 이미 Form에 대해 다루어보았

    다. Form은 HTML의 요소이지만 데이터를 서버에 보낸다는 면에서 Server Side

    언어가 반드시 필요하다.

    Ÿ Form은 form 태그와 input 및 textarea 태그들, 그리고 전송버튼으로 이루어진

    데이터 전송을 위해 작성되는 요소이다.

    Ÿ 데이터 전송 방식(Method)은 크게 GET과 POST로 구분된다. 이 두 방식의 차이

    는 앞에서 $_GET, $_POST를 설명하면서 간단히 다룬 적이 있지만 여기서 좀더

    자세히 알아보면 다음과 같다.

    ¡ GET

    Ÿ 과 같이 사용하거나 주소 끝에 ?를

    붙이고name/value 쌍으로, 또 여러 값인 경우 &를 붙여서 전송한다.

    Ÿ URL의 최대 길이는 3,000글자(character)이므로 GET 방식으로 전송할 수 있는

    데이터의 양에는 한계가 있다.

    Ÿ URL로 데이터가 전송되므로 보안이 필요한 민감한 정보는 GET으로 전송하면

    안된다.

    Ÿ 사용자가 즐겨찾기 등에 주소를 등록해두거나 할 때는 GET 방식의 주소를 갖

    는게 유용하다.

    Ÿ 주로 GET은 검색과 같은 비보안 데이터 처리에 사용하는 것이 좋다.

  • PHP_Web_Programming(유승열).hwp 84

    ¡ POST

    Ÿ 와 같이 form을 구성한다. 데이

    터는 URL로 전송되지 않는다.

    Ÿ 전송되는 데이터의 사이즈에는 제한이 없다.

    Ÿ POST 방식의 데이터 전송은 항상 Submit되어야 하므로 즐겨찾기 등에 사용할

    수가 없다. 따라서 보안정보가 있지 않는한 POST보다는 GET이 유용하다.

    HTTP Methods : POST, GET, PUT, DELETE

    HTTP Method에는 POST, GET 외에도 PUT/PATCH, DELETE 등이 있다. 이 Method들은 일반적인 웹브

    라우저의 Form에서 임의로 설정하여 사용할 수는 없지만 MVC Framework 등의 Open Source 들에 의

    해 RESTful API를 구현하할 때 사용된다.

    ¡ GET Form 예제

    Ÿ form.html

    ��

    ��$_POST

    ��

    ����

    ������PHP�Forms

    ����

    ����

    �����

    ������검색어

    ������

    �����

    �����찾기

    ����

  • PHP_Web_Programming(유승열).hwp 85

    Ÿ search.php

    F 주소 끝에 값이 전송되어 넘겨지는 것을 확인할 수 있다.

    ¡ POST Form 예제

    Ÿ form.html

    �Forms

  • PHP_Web_Programming(유승열).hwp 86

    href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    ��

    ����

    �����Blog�글쓰기

    ����

    ����

    �����

    ������제목

    ������

    �����

    �����

    ������글쓴이

    ������

    ��������

    �����

    ������본문

    ������

    �������

    �����

    ������첨부파일

    ������

    �����

    �����글등록

    ����

    Ÿ write.php

  • PHP_Web_Programming(유승열).hwp 87

    //필수�항목인�$title,�$writer,�$content�값이�모두�비어�있지�않으면�실행

    if(�$title�&&�$writer�&&�$content�)�{

    �echo�"title�=�{$title}
    ";

    �echo�"writer�=�{$writer}
    ";

    �echo�"content�=�{$content}
    ";

    �echo�"file�=�{$file}
    ";

    }

    print_r($_POST);

    ?>

    ¡ Form Validation

    Ÿ form validation이란 Form을 통해서 전송되는 데이터의 유효성을 검증하고 넓

    게는 데이터로부터의 공격가능성을 차단하는 작업을 말한다.

    Ÿ form validation은 크게 클라이언트(사용자 브라우저) 사이트에서의 작업과 서

    버 사이드 작업으로 구분할 수 있다.

    Ÿ 클라이언트에서는 HTML과 JavaScript 등으로 Form 입력에 대한 조건을 지정

    하거나 제한할 수 있고 서버에서는 PHP와 같은 서버사이드 언어에서 전송되어

    온 데이터를 검증할 수 있다.

  • PHP_Web_Programming(유승열).hwp 88

    Ÿ 그러나 클라이언트 측면에서의 데이터는 개발자도구만으로도 쉽게 변조가 가

    능하므로 반드시 서버 사이드에서의 validation이 이루어져야 한다.

    ¡ Client Side Form Validation

    Ÿ 클라이언트에서는 HTML, JavaSCript로 Form Validation이 가능하다.

    Ÿ HTML5에서는 input의 type에 따라 데이터의 형식을 제한할 수 있으며

    required를 사용해 필수 입력 항목임을 지정할 수 있다.

    Ÿ input type에 따른 데이터 형식 제한 – 모든 브라우저에서 지원하지 않기 때문

    에 기본적인 항목에 대한 예만 설명하며 JavaScript 등으로 보안해야 한다.

    ① email -

  • PHP_Web_Programming(유승열).hwp 89

    �����

    ������글쓴이

    ������

    ������

    �����

    ������Email

    ������

    �������������

    �����

    ������본문

    ������

    �������

    �����

    ������첨부파일

    ������

    �����

    �����글등록

    ����

    F 필수 입력(required) 속성을 가진 항목을 비워두고 전송하면 전송이 안되면서 에러를 표시

    한다.

    F email 형식에 맞지 않으면 에러를 표시한다.

    Ÿ JavaScript를 활용한 form validation

    F HTML5를 지원하지 않는 브라우저 또는 브라우저 버전마다 특정 속성을 지원하지 않기 때

    문에 input type 또는 required만으로 form validation을 완벽하게 수행할 수 없다. 따라서

    다음과 같이 JavaScript를 활용한 validation도 알아두어야 한다.

    F 특히 보아야 할 것은 form 태그 안에 있는 onsubmit="return formCheck();" 속성이다. 이

    속성은 전송(submit)이 이루어 질 때 해야 할 일을 정해주는데 formCheck() 함수로부터 반

  • PHP_Web_Programming(유승열).hwp 90

    환 받은 값을 form에게 반환한다. 이 때 false가 반환되면 폼은 전송되지 않는다. 때로는

    form의 전송 자체를 막고자 할 때는 onsubmit="return false;"라고 해도 된다. formCheck()

    함수에서는 데이터를 하나하나 검사 해서 만일 하나라도 유효하지 않은 값이 나타나면 바

    로 return false를 실행하여 false를 반환하므로 폼 전송을 막는다.

    Forms

    ��

    ����

    �����

    ������이름

    ������

    ������메일

    ������

    ������나이

    ������

    ������회원가입

    �����

    ����

    ��function�formCheck()�{

    ���var�username�=�document.getElementById("username").value;

    ���var�useremail�=�document.getElementById("useremail").value;

    ���var�userage�=�document.getElementById("userage").value;

    ���//username�항목이�비어�있는지�검사�

    ���if(�username�==�""�)�{

    ����alert("이름은�필수�항목입니다.");

    ����document.getElementById("username").focus();

    ����return�false;

    ���}

    ���//useremail�항목이�비어�있는지�검사�

    ���if(�useremail�==�""�)�{

    ����alert("Email은�필수�항목입니다.");

    ����document.getElementById("useremail").focus();

    ����return�false;

    ���}

    ���//validateEmail()�함수에�값을�보내서�유효한지�검사하고�

    ���//false이면�경고를�보여주고�false를�반환하여�폼이�전송되지�않게�한다.

    ���if(�!�validateEmail(useremail)�)�{

    ����alert("Email�형식이�유효하지�않습니다.");

  • PHP_Web_Programming(유승열).hwp 91

    ����document.getElementById("useremail").focus();

    ����return�false;

    ���}

    ���//userage�항목이�비어�있는지�검사�

    ���if(�userage�==�""�)�{

    ����alert("나이는�필수�항목입니다.");

    ����document.getElementById("userage").focus();

    ����return�false;

    ���}

    ���//isNaN은�Not�a�Number인지를�확인하는�함수�

    ���if(�isNaN(userage)�)�{

    ����alert("나이는�숫자이어야�합니다.");

    ����document.getElementById("userage").focus();

    ����return�false;�

    ���}

    ��}

    ��//정규표현식을�사용해서�유효한�Email�주소인지�확인하는�함수�

    ��//https://stackoverflow.com/questions/46155/how-to-validate-email-address-in-javascript

    ��function�validateEmail(email)�{

    ���var�re�=�

    /^(([^()[\]\\.,;:\s@\"]+(\.[^()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0

    -9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    ���return�re.test(email);�//email에�유효하면�true,�맞지�않으면�false가�반환됨�

    ��}��

  • PHP_Web_Programming(유승열).hwp 92

    ¡ Server Side Form Validation

    Ÿ 앞서 설명했듯이 클라이언트 사이드에서의 폼 유효성 검증만으로는 완벽한 데

    이터를 보장할 수 없다.

    Ÿ 따라서 반드시 서버 사이드에서도 데이터 유효성 검증을 해야 하는데 이미 앞

    의 $_GET, $_POST 등에서 값이 있는지 없는지 검사하는 예제를 다루었기 때문

    에 여기서는 보안과 관련된 문제를 포함해서 알아보자.

    Ÿ joinform.html

    �Forms

    ��

    ����

    �����

    ������이름

    ������

    ������메일

    ������

    ������나이

    ������

    ������회원가입

    �����

    ����

    F 테스트를 위해서 클라이언트에서 어떤 validation도 실행하지 않도록 작성하였음

  • PHP_Web_Programming(유승열).hwp 93

    Ÿ join.php

  • PHP_Web_Programming(유승열).hwp 94

    F form에 아무 값도 입력하지 않고 전송을 누르면 아래와 같이 표시된다.

    F form에 다음과 같이 이름은 비우고 메일과 나이에 유효하지 않은 값을 넣으면 다음과 같이

    표시된다.

    F 아래와 같이 모든 데이터를 유효하게 입력하면 데이터가 유효하다고 표시됨.

    ¡ Form Data 보안

    Ÿ Form데이터는 서버에 의도하지 않은 데이터를 전송해서 해킹 등에 악용하는

    주요 창구이다.

  • PHP_Web_Programming(유승열).hwp 95

    Ÿ 예를 들어 XSS(Cross Site Scripting)같은 공격은 Form에 JavaScript 코드를 몇

    줄 전송하는 것만으로도 가능하다.

    Ÿ 여기서는 몇가지 간단한 방법으로 이와 같은 공격을 방어하는 방법을 알아보

    자.

    Ÿ XSS 공격 사례

    F 앞의 joinform.html에서 이름 대신 다음과 같이 써보자. 그리고 join.php에 전송을 그대로

    해보자. Chrome 최신 버전은 이러한 데이터 전송을 브라우저가 차단하므로 IE 11에서 테스

    트해볼 것이다.

    alert('당신은�해킹�당했어요');

    Ÿ XSS 공격 차단

    F 위와 같은 공격을 차단하려면 어떻게 해야 할까? 입력된 데이터에서 html 코드 또는

    JavaScript 코드로 인식될 수 있는 코드들을 일반 문자로 변환하거나 제거해주어야 한다.

  • PHP_Web_Programming(유승열).hwp 96

    F 위 join.php 코드에서 $username = $_POST['username']; 부분을 다음과 같이 고쳐보자.

    $username�=�htmlspecialchars($_POST['username']);

    F htmlspecialchars() 함수에 의해 alert('당신은 해킹 당했어요');가 그대로 실

    행되는 것이 아니라 화면에 출력을 위한 문자로 바뀌게 된다.

    F 위 화면의 소스보기를 열어서 보면 다음과 같이 script에서 < 문자가 < 로, >가 &gtl;로

    바뀐 것을 볼 수 있다. 이렇게 하면 는 태그가 아니라 화면에 출력될 뿐이다.

    모든�데이터�유효

    username�=�

    useremail�=�[email protected]

    userage�=�22

  • PHP_Web_Programming(유승열).hwp 97

    PHP Filters

    ¡ Filter란?

    Ÿ 앞에서 Form 데이터 유효성 검증에 대해 설명하면서 filter_var() 함수를 사용한

    검증 예제가 포함된 적이 있었다.

    Ÿ PHP는 Filter를 제공하여 다양한 방법으로 데이터의 유효성을 검증하고 데이터

    를 정리할 수 있도록 해준다.

    Ÿ Filter 종류

    ① Validate filter – 비교 대상의 값이 지정한 필터의 조건에 맞는지 검사 TRUE 또는 FALSE

    ② Sanitize filter – 포함되어서는 안되는 값들을 제거해주는 filter

    Ÿ Filter 사용법

    mixed�filter_var�(�mixed�$variable�[,�int�$filter�=�FILTER_DEFAULT�[,�mixed�$options�]]�)

    F $variable – 검사하려는 값

    F $filter – 적용하려는 필터 ID(숫자) 또는 필터 이름(예, FILTER_VALIDATE_INT)

    F $options – 추가 속성. 예) FILTER_VALIDATE_INT의 경우 범위를 지정하거나 할 때 사용

    ¡ 예제로 Filter 배우기

    Ÿ filter_email.php

  • PHP_Web_Programming(유승열).hwp 98

    �echo�"{$a}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$a}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($b,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$b}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$b}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($d,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$d}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$d}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($e,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$e}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$e}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($f,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$f}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$f}는�올바른�Email�주소가�아닙니다.
    ";

    }

    ?>

    Ÿ filter_int.php

  • PHP_Web_Programming(유승열).hwp 99

    if(�filter_var($a,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$a}는�정수입니다.
    ";

    }�else�{

    �echo�"{$a}는�정수가�아닙니다.
    ";

    }

    if(�filter_var($b,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$b}는�정수입니다.
    ";

    }�else�{

    �echo�"{$b}는�정수가�아닙니다.
    ";

    }

    if(�filter_var($c,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$c}는�정수입니다.
    ";

    }�else�{

    �echo�"{$c}는�정수가�아닙니다.
    ";

    }

    if(�filter_var($d,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$d}는�정수입니다.
    ";

    }�else�{

    �echo�"{$d}는�정수가�아닙니다.
    ";

    }

    if(�filter_var($e,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$e}는�정수입니다.
    ";

    }�else�{

    �echo�"{$e}는�정수가�아닙니다.
    ";

    }

    if(�filter_var($f,�FILTER_VALIDATE_INT)�)�{

    �echo�"{$f}는�정수입니다.
    ";

    }�else�{

    �echo�"{$f}는�정수가�아닙니다.
    ";

    }

    ?>

  • PHP_Web_Programming(유승열).hwp 100

    Ÿ filter_ip.php

    Ÿ filter_url.php

  • PHP_Web_Programming(유승열).hwp 101

    if(�filter_var($a,�FILTER_VALIDATE_URL)�)�{

    �echo�"{$a}는�올바른�URL입니다.
    ";

    }�else�{

    �echo�"{$a}는�올바른�URL이�아닙니다.
    ";

    }

    if(�filter_var($b,�FILTER_VALIDATE_URL)�)�{

    �echo�"{$b}는�올바른�URL입니다.
    ";

    }�else�{

    �echo�"{$b}는�올바른�URL이�아닙니다.
    ";

    }

    if(�filter_var($c,�FILTER_VALIDATE_URL)�)�{

    �echo�"{$c}는�올바른�URL입니다.
    ";

    }�else�{

    �echo�"{$c}는�올바른�URL이�아닙니다.
    ";

    }

    ?>

    Ÿ filter_sanitize_email.php

  • PHP_Web_Programming(유승열).hwp 102

    �echo�"{$aa}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($b,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$b}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$b}는�올바른�Email�주소가�아닙니다.
    ";

    }

    if(�filter_var($bb,�FILTER_VALIDATE_EMAIL)�)�{

    �echo�"{$bb}는�올바른�Email�주소입니다.
    ";

    }�else�{

    �echo�"{$bb}는�올바른�Email�주소가�아닙니다.
    ";

    }

    ?>

    Ÿ filter 참조 링크들

    F https://www.w3schools.com/php/php_filter.asp

    F https://www.w3schools.com/php/php_filter_advanced.asp

    F http://php.net/manual/kr/filter.filters.php

    F http://php.net/manual/kr/filter.filters.validate.php

    F http://php.net/manual/kr/filter.filters.sanitize.php

  • PHP_Web_Programming(유승열).hwp 103

    PHP 파일에 다른 PHP 포함

    ¡ include, require

    Ÿ include와 require는 모두 PHP 파일 안에 또 다른 PHP 파일을 포함시켜 실행

    하는데 사용하는 함수들이다.

    Ÿ PHP 파일 안에 다른 PHP 파일을 포함할 수 있게 됨으로써 PHP는 훨씬 더 강

    력한 코딩 구조를 가질 수 있게 되는데 예를 들어 여러 페이지들에 공통으로

    사용되는 환경설정, DB 연결설정, 반복적으로 사용되는 함수나 클래스 들을 페

    이지마다 새로 구현할 필요 없이 하나의 PHP 파일에 저장해두고 이를 등록하

    여 사용할 수 있는 것이다.

    Ÿ include와 require는 거의 모든 기능에서 유사하게 작동하지만 에러를 표시하

    거나 처리하는 방법에서 다르다. 여기서는 두 함수의 차이점은 무시하고 공통

    점을 가진 함수로 간주하여 예제를 만든다.

    Ÿ include, include_once, require, requre_once

    F include와 requre는 모두 PHP 파일 안에 다른 PHP를 포함한다는 점에서 같다. 그렇다면 각

    함수이름 끝에 _once가 붙은 경우는 무엇이 다를까?

    F include_once, require_once는 모두 파일을 한 번만 포함시킨 다는 점에서 다르다. 예를 들

    어 어떤 파일 안에서 function.php 파일을 include 했는데 다른 줄에서 이 파일을 다시 한

    번 포함시키면 어떤 문제가 생길까? 만일 함수나 클래스 등이 포함되어 있다면 중복 선언

    등의 에러가 발생한다. 이러한 문제를 방지하기 위해 _once가 붙은 함수를 사용한다.

    ¡ include 기본 예제

    Ÿ 이 예제의 기본 구조는 html 파일을 둘로 나누어 콘텐츠의 윗 부분은

    header.php에 저장하고 아래 부분은 footer.php에 저장하여 include.php 파일

    에 각각 포함시키는 방법이다.

    Ÿ include.php 파일은 header.php 포함, 콘텐츠 직접입력, footer.php 포함 순으

  • PHP_Web_Programming(유승열).hwp 104

    로 파일을 구성한다.

    Ÿ header.php와 footer.php 두 파일을 합치면 기본적인 HTML 코드가 된다. 이를

    둘러 나누어 위 아래로 배치하는 것이다.

    Ÿ header.php

    �include

    ��Include�Example

    Ÿ footer.php

    ©�2017�webskills.kr.�All�Rights�Reserved.

    Ÿ include.php

    Lorem

    Lorem�ipsum�dolor�sit�amet,�consectetur�adipisicing�elit,�sed�do�eiusmod

    tempor�incididunt�ut�labore�et�dolore�magna�aliqua.�Ut�enim�ad�minim�veniam,

    quis�nostrud�exercitation�ullamco�laboris�nisi�ut�aliquip�ex�ea�commodo

    consequat.�Duis�aute�irure�dolor�in�reprehenderit�in�voluptate�velit�esse

    cillum�dolore�eu�fugiat�nulla�pariatur.�Excepteur�sint�occaecat�cupidatat�non

    proident,�sunt�in�culpa�qui�officia�deserunt�mollit�anim�id�est�laborum.

  • PHP_Web_Programming(유승열).hwp 105

    Ÿ 위 include.php 파일을 실행하고 소스보기를 하면 다음과 같이 세 개의 파일이

    합쳐진 결과를 볼 수 있다.

    �include

    ��Include�Example

    ��Lorem

    ��

    Lorem�ipsum�dolor�sit�amet,�consectetur�adipisicing�elit,�sed�do�eiusmod

    tempor�incididunt�ut�labore�et�dolore�magna�aliqua.�Ut�enim�ad�minim�veniam,

    quis�nostrud�exercitation�ullamco�laboris�nisi�ut�aliquip�ex�ea�commodo

    consequat.�Duis�aute�irure�dolor�in�reprehenderit�in�voluptate�velit�esse

    cillum�dolore�eu�fugiat�nulla�pariatur.�Excepteur�sint�occaecat�cupidatat�non

    proident,�sunt�in�culpa�qui�officia�deserunt�mollit�anim�id�est�laborum.

    ©�2017�webskills.kr.�All�Rights�Reserved.

  • PHP_Web_Programming(유승열).hwp 106

    ¡ include 중복 시 에러 예제와 해결방법

    Ÿ 위의 예제에서는 단순히 HTML 콘텐츠들만 포함된 PHP 파일들을 include했다.

    이 경우에는 중복 include해도 크게 문제가 되지 않는다. 예를 들어 footer.php

    를 두 번 include해도 내용만 두 번 출력될 뿐 에러는 나지 않는다.

    Ÿ 아래 예제는 위 include.php 파일의 끝에 footer.php를 두 번 include 했다.

    Lorem

    Lorem�ipsum�dolor�sit�amet,�consectetur�adipisicing�elit,�sed�do�eiusmod

    tempor�incididunt�ut�labore�et�dolore�magna�aliqua.�Ut�enim�ad�minim�veniam,

    quis�nostrud�exercitation�ullamco�laboris�nisi�ut�aliquip�ex�ea�commodo

    consequat.�Duis�aute�irure�dolor�in�reprehenderit�in�voluptate�velit�esse

    cillum�dolore�eu�fugiat�nulla�pariatur.�Excepteur�sint�occaecat�cupidatat�non

    proident,�sunt�in�culpa�qui�officia�deserunt�mollit�anim�id�est�laborum.

    F 위 그림에서 보듯 단순한 HTML 콘텐츠 파일은 내용을 두 번 출력해줄 뿐이다. 물론 이것

    이 w3c의 HTML Validation에서는 에러를 일으킬 것이다. 왜냐하면

  • PHP_Web_Programming(유승열).hwp 107

    등이 두 번 포함되어 있기 때문이다. 그러나 적어도 PHP에서는 에러가 나지 않는다.

    Ÿ 하지만 포함하려고 하는 php 파일에 함수와 같이 하나의 문서에 두 번 정의되

    어서는 안되는 요소가 있을 때는 예기가 달라진다. 다음의 예제를 보자.

    Ÿ functions.php

    Ÿ include.php

    Lorem

    Lorem�ipsum�dolor�sit�amet,�consectetur�adipisicing�elit,�sed�do�eiusmod...

    F 위 include.php 파일에서 functions.php 파일을 문서의 처음과 끝에 두 번 include 시켰다.

    functions.php 파일 안에는 두 번 정의될 수 없는 함수가 포함되어 있다. 특별한 실행코드

    는 없지만 그 실행결과는 어떻게 될까?

  • PHP_Web_Programming(유승열).hwp 108

    F 결과는 Fatal error 발생이다. 이미 정의된 myFunction()은 재 정의될 수 없다는 것이다.

    F 이런 에러를 방지하기 위해 사용하는 것이 include_once()이다. 아래와 같이 코드를 고치면

    에러가 발생하지 않는다.

    Lorem

    Lorem�ipsum�dolor�sit�amet,�consectetur�adipisicing�elit,�sed�do�eiusmod

    tempor�incididunt�ut�labore�et�dolore�magna�aliqua.�Ut�enim�ad�minim�veniam,

    quis�nostrud�exercitation�ullamco�laboris�nisi�ut�aliquip�ex�ea�commodo

    consequat.�Duis�aute�irure�dolor�in�reprehenderit�in�voluptate�velit�esse

    cillum�dolore�eu�fugiat�nulla�pariatur.�Excepteur�sint�occaecat�cupidatat�non

    proident,�sunt�in�culpa�qui�officia�deserun