sample_ 백엔드 프로그래밍을 위한 PHP & MySQL Flipbook PDF

sample_ 백엔드 프로그래밍을 위한 PHP & MySQL

15 downloads 98 Views 3MB Size

Recommend Stories


Desarrollo Web con PHP y MySQL
Apéndice Desarrollo Web con PHP y MySQL aspiraciones"; } ?> BASES DE DATOS Hasta ahora hemos visto la funciones básicas de PHP, lo que viene a con

SAMPLE SAMPLE SAMPLE SAMPLE
E L P M E A L S MP E A L S MP E A L S MP A S GREEN APPLE EDUCATIONAL PRODUCTS SPANISH READING TEST BOOK GRADE 5 E L P M E A L S MP E A L S MP E A

Instalar y configurar Apache, MySQL, PHP y phpmyadmin en Ubuntu
Instalar y configurar Apache, MySQL, PHP y phpMyAdmin en Ubuntu 16 de julio de 2013 AUTOR: LUIS ALEJANDRO BERNAL ROMERO (AZTLEK) Email: aztlek@gmail.

Story Transcript

1)1.Z42$PQZSJHIUϥCZ+PO%VDLFUU "MM3JHIUT3FTFSWFE 5IJTUSBOTMBUJPOQVCMJTIFEVOEFSMJDFOTFXJUIUIFPSJHJOBMQVCMJTIFS +PIO8JMFZ4POT*ODUISPVHI%BOOZ)POH"HFODZ,PSFB ,PSFBOFEJUJPODPQZSJHIUϥCZ+1VC$P-UE 핂픦묻펂헎핟뭚픎샎삖펞핂헒킪읊헎핟뭚칺퐎픦솓헞몒퍋픊옪훊헪핂펞핖킃삖삲 헎핟뭚쩣펞픦묻뺂펞컪쫂읊짩쁢헎핟줊핂즎옪줂삶헒핺퐎줂삶쫃헪읊믖삖삲 

짿펢슪옪믆앦짛픒퓒1)1.Z42쾒짪뼒풢핊 힎픎핂홂숞 폼밂핂짦컫 뺆핂핳컿숞 뺆뫁훊킫칺헪핂 킮몮뼒풢핊헪 훊콚몋믾솒훊킪솧밆헒큲 핂힎XXXKQVCLS풞몮몮TVCNJU!KQVCLS솓핞줆픦IFMQ!KQVCLS묞핺줆픦UFYUCPPL!KQVCLS 콚믾쭎밎헣훎핂캏쫃콯폏뭚퓮않콯쿦짣핺핆짾핆 콚힎풞쭎짊힎핂킇밎헣짆컪켆풞싢핞핆쭎핂짊쿧쪟 힒콯폏묞헣묞폂핂헣뺂힎싢핞핆컿픎몋 푷힎않퓮핆쾒밆읾헪쫆핊힒헪칺 *4#/ 맠풞

˟핂픎헎핟뭚쩣펞싾않쫂읊짩쁢헎핟줊핂즎옪줂삶헒핺퐎줂삶쫃헪읊믖힎젾 핂뺂푷픦헒쭎쏞쁢핊쭎읊핂푷엲졂짦슪킪헎핟뭚핞퐎헪핂픦컪졂솧픦읊짩팒퍊삖삲 ˟핦좉쇪픎묺핓킮컪헞펞컪짢붆펂슪잋삖삲 헪핂픎솓핞펺얺쭒픦팒핂싢펂퐎풞몮몮읊믾삲읺몮핖킃삖삲픊옪뺂몮핞쁢팒핂싢펂빦풞몮많핖쁢 쭒벦컪쁢픦맒삶맪푢퐎옎묺컿뫊힎픎핂폼밂핂퍋엳슿픒젢핊TVCNJU!KQVCLS옪쫂뺂훊켆푢

PH P

t en m op el ev D

&

eb W

M yS Q L

e id -s er rv Se

莘贻籃鱫翃畟绿荴身蹫鳃

PHP & MySQL 竗軛颗萇軛訋疗荿蹠玃莃璷瑣袃

进箷険鄧躳 鷐荿袄趕疧

※ 드리는 말씀

・ 이 책에 기재된 내용을 기반으로 한 운용 결과에 대해 지은이/옮긴이, 소프트웨어 개발자 및 제공자,  제이펍 출판사는 일체의 책임을 지지 않으므로 양해 바랍니다. ・ 이 책에 등장하는 각 회사명, 제품명은 일반적으로 각 회사의 등록 상표 또는 상표입니다.  본문 중에는 TM, Ⓒ, Ⓡ 등의 기호를 생략했습니다. ・ 이 책에서 소개한 URL 등은 시간이 지나면 변경될 수 있습니다.

・ 이 책의 예제 코드는 http://phpandmysql.com에서 다운로드할 수 있습니다. ・ 책의 내용과 관련된 문의사항은 옮긴이나 출판사로 연락해주시기 바랍니다. - 옮긴이: http://cafe.naver.com/petersbook - 출판사: [email protected]

PHP&MySQL.indb 4

2023. 3. 30. 오전 10:58

옮긴이 머리말

극히 개인적인 생각이지만, 프로그래밍 언어나 플랫폼 또는 특정 프로그램의 버전이 5.0 또는 그 이상이 되면

‘믿고 사용해도 괜찮겠구나~!’ 하는 느낌을 받습니다. 선입견일 수 있지만, 제 경험으로 보면 버전 1.0은 세상 에 처음 나왔다는 것이고, 버전 2.0은 새롭고 편리한 기능 또는 함수(메서드)가 추가되었다고 느끼며, 버전 3.0 은 내부적인 구조화가 시작(또는 리뉴얼)되고, 버전 4.0은 새로운 구조 위에 새로운 기능과 함수를 추가하는 듯 합니다. 버전 5.0 정도가 되어야 비로소 안정적이며 구조화된 기반 위에 프로그램이 구축되었음을 느낍니다. 게 다가 어떤 프로그래밍 언어나 플랫폼 또는 특정 프로그램의 버전이 5.0까지 왔다는 것은 그동안 지지하고 열광 해준 사용자(고객)가 있다는 의미이기도 합니다. 제가 PHP를 처음 만났을 시절에는 ‘PHP가 좋으니, Java/JSP 가 좋으니’ 하며 개발자 간의 논쟁이 있었던 PHP 3와 PHP 4가 공존하던 시절이었습니다. 아마도 이런 논쟁은 예전이나 지금이나 그리고 앞으로도 계속되겠지만요. PHP의 장점(강점) 중 가장 매력적인 부분은 가볍지만 강 력하고 구조화된 프런트 및 백엔드를 제공하는 점이 아닐까 싶습니다. 이 책을 시작으로 PHP를 처음 접하는 독자라면 처음의 몇 페이지만 따라 해봐도 금방 이해하게 될 것입니다. 이 책은 크게 4개의 파트로 구성되어 있습니다. 첫 번째 파트는 PHP 언어에서의 기본적인 프로그래밍 명령을 다룹니다. 다른 언어에 대한 경험이 있는 독자 라면 어떤 언어를 경험했는지와 관계없이 대부분이 동일하거나 유사한 명령일 것입니다. 이 책을 시작으로 프로 그래밍을 처음 접하는 독자라면 뭔가 방대하며 세밀한 것들이 많다고 느낄 수 있습니다. 맞습니다. 프로그래밍 이라는 것은 이것저것 알아야 할 게 많습니다. 하지만 이것을 무슨 자격증 시험공부 하듯이 한꺼번에 소화하려 고 할 필요는 없습니다. 첫 번째 파트의 내용은 앞으로도 계속 사용하게 될 것들이며, 지금 이해하지 못하였다 하더라도 반복적으로 사용하다 보면 언젠가 이해될 뿐만 아니라 코딩하는 손이 먼저 움직이게 될 것들입니다. 다른 언어에 대한 경험이 있다면 눈으로 읽어도 이해할 내용이지만, 프로그래밍을 처음 시작하는 독자라면 반 드시 책의 내용을 직접 타이핑(코딩)하면서 따라 하길 권장합니다. 프로그래밍 분야에는 ‘백견이 불여일타(백 번 보는 것보다 한 번 타이핑하는 것이 더 좋다)’라는 말이 있습니다. 이 말이 옳고 그름을 떠나, 직접 해보는 것은 분

명 큰 도움이 됩니다. 두 번째 파트는 동적 웹 페이지에 대한 내용을 다룹니다. 사실 이것이 핵심이자 시작이라 해도 과언이 아닐 것 입니다. 동적 웹 페이지를 만들 게 아니라면, 굳이 이런 걸 배울 필요가 없으니까요. 정적 웹 페이지는 HTML만 으로 충분합니다. 웹 페이지(웹사이트)의 역사를 늘어놓을 생각은 없지만, PHP는 정적인 HTML 페이지를 동적

옮긴이 머리말

v

으로 움직이게 만들고자 탄생한 많은 방법들 중 하나이기 때문입니다. 이번 파트의 내용은 달달 외워야 할 것은 아니지만 여러 번 보고 이해해야 할 내용입니다. 세 번째 파트는 데이터베이스 관련 내용입니다. 간단한 예를 생각해보면, 우리가 만든 웹사이트에 사용자가 들 어와서 로그인하려고 하면 회원 정보와 로그인 데이터가 같은지 다른지를 확인해야 합니다. 이를 확인하기 위해 데이터를 데이터베이스에 저장하고, 저장된 데이터를 가져와야 하는 것은 필수적인 사항입니다. 데이터베이스 에 대한 내용은 사실 너무 방대하여 이번 파트에서 다루는 정도로는 매우 부족합니다. 하지만, 동적 웹 페이지 를 만들기 위해 필요한 기본적이며 핵심적인 내용을 다루고 있습니다. 이번 파트에서 데이터베이스와 관련된 작 업을 경험하길 바랍니다. 네 번째 파트는 실제로 웹 애플리케이션을 만드는 과정을 경험하게 합니다. 어떤 웹 페이지(사이트)를 만드는 지, 몇 명이 만드는지, 목적이 무엇인지 등 수많은 요소로 인해 개발 과정과 방법이 달라질 수 있습니다. 저는 개 발의 정답은 없다고 생각합니다만, 그렇다고 아무렇게 만들어도 된다는 것은 아닙니다. 프로젝트마다 여러 이유 로 개발 과정과 방법이 다양할 수 있습니다. 다시 말해서, 다양한 개발 과정을 경험하는 것은 개발자 자신의 경 직성을 해소해주며 넓은 시각을 갖게 한다고 믿습니다. 이번 파트에서 다루는 내용이 정답은 아닐 수 있지만, 프 로젝트를 진행하는 방법의 하나일 수 있습니다. 어떻게 진행되는지에 중점을 두고 보신다면 넓은 시각을 갖게 될 좋은 기회가 되리라 봅니다. 이 책이 나오기까지 많은 분의 노력이 있었네요. 출판사 분들의 고생은 말할 것도 없고 베타리더분들도 꼼꼼하 게 읽어보며 피드백을 주셔서 감사했습니다. 번역한다고 주말마다 카페로 나가는 아빠를 이해하며 보내준 예쁜 딸 단비에게도 고마운 마음을 전합니다. 끝으로 이 책을 시작으로 멋진 웹사이트를 만드실 여러분을 응원합니다. 어느 날 어느 사이트에서 여러분이 만 든 멋진 페이지를 만나길 기대합니다.

옮긴이 황반석

vi

옮긴이 머리말

베타리더 후기

성지훈(웨인테크놀로지) 많은 프로그래밍 언어가 그러하듯이 PHP도 나날이 발전하고 있고, 여전히 많이 사용하고 있음에도 평소 학습 할 수 있는 도서와 강의가 부족하다고 느껴 아쉬움이 많았습니다. 이 책은 PHP와 MySQL을 이용해 웹 서비스 에 필요한 대부분의 기능을 구현할 수 있도록 자세히 소개하고 있습니다. PHP를 이용해 웹 서비스를 만들고 싶 은 분들에게 좋은 가이드가 될 것입니다.

송이현(Cafe24) PHP 입문자도 부담 없이 읽을 수 있도록 상세한 설명과 충실한 예제를 갖춘 책입니다. 프로그래밍의 제일 기초 부터 설명하고 있으며, 서버 구축 등 웹 프로그래밍을 배울 때 느껴지는 초반의 허들을 크게 낮추었기 때문에 입문서로서 제격입니다. 전반적으로 설명이 상세하기 때문에 기초를 다시 잡고 싶은 분들께도 추천합니다.

신건식(클라우드브릭) PHP를 이용한 웹 개발에 누구나 쉽게 접근할 수 있는 도서입니다. 기초부터 충실히 소개하고 있고, 예제를 따 라 하다 보면 PHP & MySQL에 대한 기본기를 충분히 닦을 수 있게 해주는 책이 되리라고 생각합니다.

이재훈(브라이튼) PHP 코드를 검색하면 많은 코드가 검색되긴 하나 양질의 자료를 만나기는 쉽지 않습니다. 어지러운 검색 결과 보다 제대로 안내하는 책 한 권이 더 요긴할 수 있습니다. PHP를 사용할 때 도움받을 수 있는 좋은 길잡이라 생 각합니다. 더불어 패키지를 활용하는 PHP 생태계도 만날 수 있습니다.

정현문(허브디앤씨) PHP를 위해 살고자 하는, 죽고자 하는 모든 이들에게 강력하게 추천하는 책입니다. 기본 개념부터 시작해 심화 과정까지 이 책을 정독하시면 PHP를 어느 정도 숙지했다고 말할 수 있을 정도입니다. 처음 입문하는 분들에게 는 PHP의 매력을 느낄 수 있도록 하고, 이미 PHP를 사용 중인 현직자에게는 PHP의 향수를 다시 한번 느끼게 해주는 그런 책입니다.

베타리더 후기

vii

차례

옮긴이 머리말

v

베타리더 후기

vii

시작하며

PART I

기본 프로그래밍 명령

17

1장 변수, 표현식 그리고 연산자

29

2장 제어 구조

PART II

67

3장 함수

103

4장 객체 & 클래스

143

동적 웹 페이지

177

5장 내장 함수

201

6장 브라우저로부터 데이터 가져오기

231

7장 이미지 & 파일

285

8장 날짜 & 시간

309

9장 쿠키 & 세션

329

10장 오류 처리

349

PART III 데이터베이스 기반의 웹사이트 11장 구조화된 쿼리 언어

381 397

12장 데이터베이스에서 데이터 가져오기 & 표시하기

433

13장 데이터베이스의 데이터 업데이트하기

483

PART IV 샘플 애플리케이션 확장하기

viii

1

521

14장 리팩터링 & 종속성 주입

533

15장 네임스페이스 & 라이브러리

557

16장 멤버십

603

17장 기능 추가하기

633

찾아보기

663

시작하며

이 책은 PHP라는 프로그래밍 언어를 사용하여 웹사이트를 구축하는 방법과 웹사이트에서 사용하는 데이터를 MySQL과 같은 데이터베이스에 저장하는 방법을 알려준다.

PHP는 웹 서버에서 실행되도록 설계된 프로그래밍 언어로, 누군가 웹 페이지를 요청하면 해당 사용자에게 응답할 HTML 페이지를 서버에서 생성할 수 있게 된다. 이 말은 HTML 페이지를 개별 사용자에게 맞게 조정할 수 있다는 의미다. 예를 들어, 다음의 작업은 어떤 사이트에서 사용자가 수행해야 하는 요구사항이다. • 회원가입 또는 로그인: 각 사용자의 이름, 이메일, 그리고 비밀번호가 서로 다르다. • 구매하기: 각 고객의 주문, 지불, 그리고 배송 정보는 고유하다. • 웹사이트 검색: 각 사용자에 맞게 검색 결과가 조정된다.

PHP는 사이트가 보여주는 페이지의 내용, 사이트에서 판매하는 제품, 사용자에 대한 상세 정보 등의 데이터를 저장할 수 있는 MySQL 같은 데이터베이스와 함께 동작하도록 설계되었다. 이 책에서 여러분은 PHP를 사용하여 사용자가 데이터베이스에 저장된 데이터를 갱신하는 웹 페이지를 어떻게 만드는지 배우게 될 것이다. 예를 들면 다음과 같은 것을 배운다. • 콘텐츠 관리 시스템은 사이트 소유자가 폼을 사용하여 사이트의 내용을 갱신할 수 있게 하며 새로운 코드를 작성하지 않아도 갱신된 내용이 방문자에게 표시된다. • 온라인 쇼핑몰은 판매자가 판매할 상품을 나열할 수 있게 하고 소비자가 구매할 수 있게 한다. • 소셜 네트워크는 방문자가 회원가입과 로그인을 하고, 사용자 프로필을 만들고, 자신의 콘텐츠를 업로드하며, 자신의 관심사에 맞는 페이지를 볼 수 있게 한다. 이러한 사이트에 표시되는 정보는 데이터베이스에 저장되기 때문에 데이터베이스 기반 웹사이트>PHP의 HTML 링크를 작성한다.

echo "PHP"; echo 명령에 대한 여는 따옴표

이스케이핑된 따옴표는 속성을 유지한다.

echo 명령에 대한 닫는 따옴표

작성하고자 하는 텍스트와 HTML을 큰따옴표로 묶고

이것은 PHP 인터프리터가 시작하는 따옴표(여기서는

그것을 작은따옴표 안에 두어 표시할 수도 있다.

작은따옴표)와 텍스트의 끝을 가리키는 따옴표를 찾아

매칭하기 때문에 가능하다.

echo 'PHP'; echo 명령에 대한 여는 따옴표

24

PART I 기본 프로그래밍 명령

큰따옴표 안의 HTML 속성

echo 명령에 대한 닫는 따옴표

페이지에 콘텐츠 쓰기 PHP

section_a/intro/echo.php

왼쪽의 코드에서, • 우측 상단에 있는 파일 경로는

1 2



echo Command

The Candy Store page



다운로드한 샘플 코드의 파일을 나타낸다. • 숫자는 아래에서 코드를 설명하는 곳을 나타낸다. 1. echo 명령은 작은따옴표를 사용하여 방문자의 이름을 쓰고 's를 붙인다. 이름과 s 문자 사이에 있는 '를 백슬래시 문자로 이스케이핑한다. 2. echo 명령은 페이지에 단락을 추가한다.

태그는 클래스 속성을 가지고 있다.

결과

페이지에 작성된 텍스트와 마크업은 작은따옴표로 묶여 있기 때문에,

HTML 속성은 큰따옴표를 사용할 수 있다. echo 명령 뒤에 작은따옴표나 큰따옴표를 사용할 수 있지만, 하나를 골라 그것만 사용하는 것이 좋다. 이 책에서는 콘텐츠가 HTML 속성을 포함할 수 있도록 작은따옴표를 주로 사용한다.

노트: echo 명령 뒤에 큰따옴표를 사용했다면, PHP 인터프리터는 텍스트에

실험: 1번에서 Ivy라는 이름을 자신의

변수명이 포함되어 있는지를 확인한다. 만약에 변수명이 있다면 변수가 가지고

이름으로 변경하고 파일을 저장한다.

있는 값을 출력한다.

페이지를 새로고침하면 인사말에

작은따옴표로는 이 동작을 수행하지 않는다. 이에 대한 예제는 52페이지를

여러분의 이름이 표시될 것이다.

참고하자.

PART I 기본 프로그래밍 명령

25

함수 작성에 대한 접근방법 다음의 네 단계를 따르면 함수를 작성하는 데 도움이 될 것이다.

1: 작업을 간략하게 설명하기 무슨 작업을 하는지(예, get, calculate, update, save) 다음으로 작업하는 데이터 타입을 조합하여 사용한다. 이것은 함수의 이름이 될 것이다. 함수명은 절대로 변경되지 않는다.

2: 작업을 수행하는 데 필요한 데이터는 무엇인가? 필요한 데이터는 매개변수가 된다. 매개변수로 전달된 값(인수)은 함수가 호출될 때마다 변경될 수 있다.

3: 작업을 수행하는 데 반드시 따라야 할 명령 문은 무엇인가? 명령문은 중괄호 안에 구문을 사용하여 표현될 것이다. 따라야 할 명령문은 함수가 호출될 때마다 동일하다.

4: 기대하는 결과는 무엇인가? 이것은 함수로부터 반환되는 값이다. 함수가 값을 반환하도록 하는 것은 좋은 방법이다. 만약에 새로운 값을 계산하지 않거나 정보를 가져오는 작업을 하지 않는 작업을 한다면, 그 작업이 수행되었는지를 가리키는 true 또는 false를 반환하곤 한다. 반환되는 값은 함수가 작업하기 위한 값이 새롭게 제공될 때마다 변경될 수 있다.

134

PART I 기본 프로그래밍 명령

함수를 왜 사용하나? 작업을 수행하는 코드를 함수로 작성하면 여러 이점이 있다.

재사용성 이번 장에서 여러 번 보았듯이, 페이지가 동일한 작업을 여러 번 수행해야 하는 경우(예를 들어, 제품 가격 계산하기), 그 작업을 수행하는 코드를 한 번만 작성하면

된다. 페이지에서 그 작업을 수행해야 할 때마다 함수를 호출하면서 작업에 필요한 값을 제공하면 된다.

유지보수 만약에 작업을 수행하는 명령문을 변경해야 할 경우, 함수 정의의 코드만 변경하면 된다(작업이 수행될 때마다 변경할 필요는 없다). 함수 정의가 업데이트되면 함수가 호출될

때마다 업데이트된 코드가 사용될 것이다.

구조화 각 작업을 수행하는 코드를 함수에 두면, 그 작업을 수행하는 데 필요한 모든 구문을 더 쉽게 찾을 수 있다.

테스트 용이성 여러분의 코드를 개별 작업으로 나누면 각 개별 작업을 자체적으로 테스트할 수 있으므로 문제를 더 쉽게 분리할 수 있다.

3장 함수

135

이미지 자르기 이미지 자르기는 정확하게 동일한 크기의 이미지를 만들 수 있게 해주며, 새로운 이미지가 컨테이너(바운딩 박스) 크기에 맞게 해준다. 이미지를 자르면 원본 이미지의 일부는 제거된다.

이미지를 자르려면 원본 이미지에서 유지하고자 하는

Y-오프셋

부분을 선택해야 한다. 일련의 이미지를 일관된 모양으로 만들려면 각 이미지의 잘린 부분의 비율이 동일해야 한다.

X-오프셋

자를 영역을 선택했다면 모든 이미지가 동일한 크기가

선택 높이

되도록 조절할 수 있다. 자르고자 하는 이미지 영역을 선택하려면 다음의 네 가지 데이터가 필요하다. 선택 너비

• 선택 너비: X-오프셋에서부터 원하는 이미지 영역의 너비 • 선택 높이: Y-오프셋에서부터 원하는 이미지 영역의 높이 • X-오프셋: 이미지의 왼쪽 끝에서 선택 영역이 시작되는 위치까지의 거리 • Y-오프셋: 이미지의 위쪽 끝에서 선택 영역이 시작되는 위치까지의 거리 이미지가 업로드되기 전에 사용자가 브라우저에서

업로드된 이미지가 모두 동일한 크기가 되도록 하려면,

이미지를 자를 수 있도록 하는 자바스크립트 도구가 있다.

원하는 너비와 높이를 지정해야 한다. 그 값은 새로운

자세한 내용은 다음을 참고하자.

이미지 비율(너비 ÷ 높이)을 계산하는 데 사용될 것이다.

http://notes.re/php/images/crop-javascript 100

RATIO 1 100

300

PART II 동적 웹 페이지

1

1600

2000

비율: 1.25

RATIO 0.8

업로드된 이미지의 너비와 높이를 1600

구하고 업로드된 이미지의 비율(너비

2000

÷ 높이)을 계산한다.

2 유지할 이미지 영역을 선택한다.

X-오프셋

이 선택은 새로운 이미지처럼 비율이

선택 영역과 오프셋에 대한 계산은

같아야 한다.

다음 그림과 같다.

선택 너비

선택 너비

1600

1600

Y-오프셋

1600

1600

선택 높이

선택 높이

새로운 이미지 비율이 업로드된 이미지 비율보다 작다면

그렇지 않다면 다음 계산을 사용하자.

• 선택 너비 = 원본 높이 x 새로운 비율 • 선택 높이 = 원본 높이 • X-오프셋 = (원본 너비 - 선택 너비) / 2

• 선택 너비 = 원본 너비 • 선택 높이 = 원본 너비 x 새로운 비율 • X-오프셋 = 0 • Y-오프셋 = (원본 높이 - 선택 높이) / 2

• Y-오프셋 = 0



100

100

잘린 영역은 크기가 조절되어 새로운 100

100

이미지의 크기(이전 페이지에 정의됨)로 된다.

7장 이미지 & 파일

301

확장 프로그램을 사용하여 이미지 편집하기 확장 프로그램은 PHP 인터프리터에 기능을 추가하여 추가적인 작업을 할 수 있도록 해준다. GD와 Imagick은 PHP 인터프리터가 이미지 크기를 조절하고 자르도록 하는 인기 있는 확장 프로그램이다.

확장 프로그램extension이 웹 서버에 설치되면 일반적으로

이번 장의 나머지 부분에서는 GD를 사용하여 이미지

PHP 페이지에서 사용할 수 있는 추가 함수나 클래스가

크기를 조절하는 방법과 Imagick을 사용하여 이미지

주어진다(코드에서 PHP의 내장 함수와 클래스를 사용하는

크기를 조절하고 자르는 방법을 설명한다(GD를 사용하여

것과 같은 방식).

이미지를 자르는 예제는 http://notes.re/php/gd-crop을

GD와 Imagick 확장 프로그램은 포토샵의 기본 기능과 비슷한 작업을 수행하지만, 그래픽 사용자 인터페이스를 이용하여 이미지를 조작하는 게 아니라 PHP 코드로 이미지를 편집할 수 있다.

참고하자).

GD는 Imagick보다 사용하기 더 복잡하지만 PHP 4.3부터 PHP 인터프리터와 함께 디폴트로 설치되어 있는 반면에 Imagick은 사용하기 전에 웹 서버에 설치해야 한다.

GD 사용하기 만약에 여러분이 맥에서 MAMP를 사용하고 있다면, GD는 디폴트로 활성화되어 있다. 만약에 여러분이 PC에서 XAMPP를 사용하고 있다면,

GD를 사용하기 전에 GD 확장 프로그램을 활성화해야 한다. http://notes.re/php/enable-gd를 참고하자.

GD를 사용하여 이미지 크기를 조절하고 자르려면 다섯 개의 GD 함수(다음 표 참고)를 호출해야 한다. GD는 다양한 미디어 타입(GIF, JPEG, PNG, WEBP 등)을 여는 함수와 저장하는 함수가 있다(다음의 표에서 mediatype은 파일의 타입으로 대체된다 - 다음 페이지 참고).

함수

설명

getimagesize()

이미지의 크기와 미디어 타입을 가져온다.

imagecreatefrom mediatype() 이미지를 연다(mediatype을 이미지의 미디어 타입으로 교체한다). imagecreatetruecolor()

크기가 조절되거나 잘라낸 이미지 크기를 사용하여 새로운 빈 이미지를 생성한다.

imagecopyresampled()

원본 이미지에서 선택된 부분을 가져와서 크기를 조절하고, 이전 단계에서 만든 새로운 이미지에 붙여 넣는다.

imagemediatype()

이미지를 저장한다(mediatype을 이미지의 미디어 타입으로 교체한다).

302

PART II 동적 웹 페이지

미디어 타입 결정하기 이미지를 열거나 저장하기 위해 올바른 함수를 선택하려면, 이미지의 미디어 타입을 알아야 한다.



설명

0

이미지의 너비(픽셀)

1

이미지의 높이(픽셀)

GD의 getimagesize() 함수는 인수로 이미지에 대한 경로가 필요하다. 이 함수는 미디어 타입을 포함하여 이미지에 대한 데이터가 포함된 배열을 반환한다. 오른쪽의

2

이미지 타입을 설명하는 상수

3

태그에 사용할 크기를 가진 문자열: height="yyy" width="xxx"

표는 그 배열에 포함된 데이터를 보여준다(키는 숫자와

mime

이미지의 미디어 타입

단어가 혼합되어 있다).

channels 이미지가 RGB이면 3, CMYK이면 4

각 색상에 사용된 비트 수

bits

이미지 열기 & 저장하기

포맷

열기

저장

GIF

imagecreatefromgif()

imagegif()

있으므로(다음 페이지 참고) 이미지를 열거나 저장하기 위해

JPEG

imagecreatefromjpeg() imagejpeg()

올바른 함수를 호출한다.

PNG

imagecreatefrompng()

오른쪽 표는 GD가 이미지 포맷을 열고 저장하기 위해

WEBP

imagecreatefromwebp() imagewebp()

이미지의 미디어 타입은 switch 문에서 사용할 수

imagepng()

제공하는 일부 함수를 보여준다.

이미지 크기 조절하기 그리고 자르기 imagecopyrempled() 함수는 이미지의 일부나 전체를 새로운 빈 이미지로 복사한다.

$orig $orig_Y $orig_x

$orig_height

이를 위해 이 함수에는 10개의 매개변수가 있지만 5개의 매개변수 쌍으로 생각하는 게 더 쉬울 수 있다. • $new, $orig 새 이미지와 원본 이미지(함수가 호출되기 전에 변수에 저장됨 - 304쪽 참고)

$orig_width

• $new_x, $new_y 새로운 이미지에서 복사된 영역을 배치해야 하는

$new

X-오프셋과 Y-오프셋

$orig_Y

$new_height

• $orig_x, $orig_y 원본 이미지에서 선택된 영역을 가져와야 하는 X-오프셋과

$new_x

Y-오프셋 • $new_width, $new_height 새 이미지에서 선택 영역의 너비와 높이 • $orig_width, $orig_height

$new_width

원본 이미지에서 선택 영역의 너비와 높이

imagecopyresampled($new, $orig, $new_x, $new_y, $orig_x, $orig_y, $new_width, $new_height, $orig_width, $orig_height);

7장 이미지 & 파일

303

MySQL 작업을 위해 phpMyAdmin 사용하기 데이터베이스 기반의 웹사이트에서 데이터베이스는 일반적으로 사이트의 페이지와 상호작용하는 사용자에 의해 업데이트된다. 하지만 phpMyAdmin을 사용하여 추가적인 작업을 수행해야 할 경우가 있다.

데이터베이스 기반의 웹사이트를 실행할 때 수행해야 하는 어드민administration 작업이라는 것이 있다. 여기에는 다음이 포함된다. • 새로운 데이터베이스 만들기 • 기존의 데이터베이스 백업하기 • 데이터베이스에 새로운 테이블과 열 추가하기 • 새로운 기능이 추가될 때 데이터가 사이트에 올바르게 추가되거나 업데이트되는지 확인하기 • 데이터베이스의 콘텐츠에 접근하고 편집할 수 있는 사용자를 제어하는 사용자 계정 생성하기

MySQL은 이러한 어드민 작업을 수행하는 데 사용할 수 있는 자체적인 시각적 인터페이스를 제공하지는 않지만, 이러한 작업을 수행하는 데 도움을 주는

phpMyAdmin이라는 무료 오픈소스 도구가 있다. phpMyAdmin은 PHP로 작성되었으며 웹 서버에서 실행된다. 이것은 데이터베이스를 관리하는 데 사용할 수 있는 웹사이트와 같다. 이후의 몇 페이지에서는 일부 어드민 작업을 수행하기 위해 어떻게 사용되는지 보여준다.

390

PART III 데이터베이스 기반의 웹사이트

PHPMYADMIN을 찾는 방법 MAMP 또는 XAMPP를 설치하면 컴퓨터에 phpMyAdmin이 설치된다. 브라우저에서 다음의 URL을 입력하면 접근할 수 있다. http://localhost/phpmyadmin/ 만약에 여러분이 코드 샘플을 실행하기 위해 URL에 포트 번호를 추가했다면 phpMyAdmin에 접근하기 위해 동일한 포트 번호를 추가해야 할 것이다. 예를 들어 다음과 같다. http://localhost:8888/phpmyadmin/

MySQL을 지원하는 호스팅 회사에는 다양한 방법으로 어드민 작업을 수행할 수 있게 하므로 호스팅 회사에 확인하도록 하자. phpMyAdmin의 전체 버전에 대한 접근 권한 대신에 다음을 사용하는 경우가 종종 있다. • 데이터베이스/사용자 계정을 생성하는 자체 도구 • 데이터베이스의 콘텐츠를 백업, 검사, 업데이트하는 제한된 버전의 phpMyAdmin • phpMyAdmin에 접근하기 위한 자체 URL

데이터베이스를 관리하기 위해 phpMyAdmin 사용하기 phpMyAdmin 화면은 세 가지 주요 영역이 있다. phpMyAdmin 버전마다 약간씩 다르게 보일 수 있지만 페이지 항목의 기능과 위치는 동일하다.

2 1

3

1

데이터베이스 & 테이블

2



3

메인 창

웹 서버가 여러 사이트를 호스팅할 수

이것은 인터페이스로 할 수 있는 일을

여기서 어드민 작업을 수행한다(예를

있는 것처럼, 하나의 MySQL은 여러

나타낸다.

들어, 데이터베이스의 콘텐츠가

데이터베이스를 보유할 수 있다.

• phpMyAdmin을 열면, MySQL

데이터베이스의 이름은 왼쪽 메뉴에

소프트웨어로 수행할 수 있는

표시된다. 데이터베이스 이름을

작업이 탭에 표시된다.

클릭하면 목록에 + 기호가 확장되어

• 왼쪽 메뉴에서 데이터베이스를

표시되며, 열을 업데이트하거나 행을 추가할 수 있다).

MySQL은 information_schema, mysql, performance_schema,

그 데이터베이스에 있는 테이블의

클릭하면, 탭은 해당

이름이 표시된다.

데이터베이스에서 수행할 수 있는

sys와 같은 자체 데이터베이스를 생성한다. 여러분이 초보자라면

작업으로 변경된다.

이것을 수정하지 말자.

PART III 데이터베이스 기반의 웹사이트

391

몇 개의 PHP 파일로 전체 사이트를 운영하는 방법 다음의 12페이지는 네 개의 PHP 파일을 사용하여 샘플 웹사이트의 50페이지 이상을 어떻게 표시하는지 보여준다.

이 네 개의 PHP 파일은 각각 두 부분으로 나뉜다.

각 페이지는 네 개의 인클루드 파일을 사용한다.

• 먼저 데이터베이스에서 데이터를 수집하여 변수에

• database-connection.php는 데이터베이스 연결을 관리하는 PDO 객체를 생성한다. • functions.php에는 데이터베이스에서 데이터를

저장하는 코드가 있다. • 다음으로 이 변수의 데이터는 방문자에게 다시 전송되는 HTML 페이지를 만드는 데 사용된다. 이러한 파일은 템플릿처럼 동작한다고 생각할 수 있다. 파일 중 하나가 요청될 때마다 데이터베이스에서 다른 데이터를 수집하여 HTML 페이지에서 관련된 부분에 데이터를 넣고 방문자의 브라우저에 HTML을 보낼 수 있다.

index.php 홈페이지에는 사이트에 게시된 최신 기사 6개의 요약이 표시된다. 새로운 기사가 데이터베이스에 저장되면, 이 페이지는 새로운 기사의 세부 정보를 표시하기 위해 자동으로 업데이트될 것이다(그리고 여섯 개의 기사 중 가장 오래된 기사는 더 이상 표시되지 않을 것이다).

HTML 페이지의 구조는 항상 동일하게 유지되지만, 데이터베이스에서 가져와 표시하는 콘텐츠는 변경될 수 있다.

460

PART III 데이터베이스 기반의 웹사이트

가져와서 그 데이터를 형식화하는 함수가 있다. • header.php는 각 페이지에 사용되는 헤더를 포함하며 내비게이션을 생성한다. • footer.php는 각 페이지에서 사용되는 푸터를 포함한다.

category.php 이 파일은 카테고리의 제목과 설명을 표시하고 다음으로 해당 카테고리에 게시된 각 기사의 요약이 표시된다.

HTML 페이지의 구조는 동일하게 유지되지만 표시되는 데이터는 변경될 수 있다.

URL 뒤의 쿼리 문자열은 데이터베이스에서 수집되어 페이지에 표시되어야 하는 카테고리의 아이디를 가진다. 예를 들면 다음과 같다. category.php?id=1

member.php 이 파일은 사이트의 모든 회원의 프로필을 표시할 수 있다. 그다음으로 회원이 작성한 기사의 요약이 온다.

URL 뒤의 쿼리 문자열은 데이터베이스에서 수집되어 페이지에 표시되어야 하는 회원의 아이디를 가진다. 예를 들면 다음과 같다. member.php?id=1

article.php 이 파일은 모든 기사를 표시할 수 있다. 이미지, 카테고리, 제목, 날짜, 콘텐츠, 그리고 작성자는 각 기사마다 동일한 위치에 오지만 표시되는 데이터는 변경될 수 있다.

URL 뒤의 쿼리 문자열은 데이터베이스에서 수집되어 페이지에 표시되어야 하는 기사의 아이디를 가진다. 예를 들면 다음과 같다. article.php?id=1

12장 데이터베이스에서 데이터 가져오기 & 표시하기

461

검색 기능 만들기 검색 페이지는 데이터베이스에서 데이터를 검색하는 SQL을 어떻게 사용하는지와 데이터베이스 쿼리가 많은 행을 반환할 수 있는 경우에 여러 페이지에 걸쳐 결과를 표시하는 페이징 처리 방법을 보여준다.

방문자가 검색 상자에 용어를 입력하고 폼을 제출하면,

데이터베이스가 일치하는 결과를 많이 찾았을 때, 검색

데이터베이스는 article 테이블의 title, summary,

결과를 페이징하여 표시할 수 있다.

description 열에서 해당 용어를 찾는다. 이 열에서 검색어가 발견되면 기사의 요약이 결과 세트에 추가되어 방문자가 쿼리와 일치하는 기사를 보게 된다. 검색 페이지는 두 개의 SQL 쿼리를 실행한다.

• 페이지마다 해당 결과의 하위 집합을 표시한다. • 방문자가 다음(또는 이전)의 결과 세트를 요청할 수 .

있도록 결과 아래에 링크를 추가한다.

결과를 여러 페이지로 나누기 때문에 이것을 페이징

• 하나는 일치하는 결과의 총 수를 카운팅한다.

처리pagination라고 한다. 검색 결과를 나타내는 각

• 다른 하나는 해당 기사의 세부 정보를 가져온다.

페이지에 대한 링크는 쿼리 문자열에 세 개의 이름/값 쌍이

다음은 검색어를 포함하는 기사의 숫자를 카운팅하는 SQL 쿼리다. 검색어는 쿼리 안에서 세 번 반복된다. 먼저 title 열을 확인하는 데 쓰이고, 다음으로 summary 열을 확인하는 데 쓰이며, 마지막으로 content 열을 확인하는 데 쓰인다.

SQL 쿼리에서 플레이스홀더를 재사용할 수 없으므로 각

필요하다. 이것은 어떤 기사를 데이터베이스에서 가져와서 표시해야 하는지 검색 페이지가 알 수 있도록 한다. • term 검색어를 담는다. • show 얼마나 많은 결과를 페이지에 표시할지 나타낸다. • from 이미 표시된 항목 수를 나타낸다.

열을 검색하기 위한 서로 다른 플레이스홀더 이름(:term1,

show 값은 SQL의 LIMIT 절과 함께 사용되므로

:term2, :term3)을 사용한다.

데이터베이스는 해당 페이지에 표시될 올바른 수의 기사를 반환한다.

SELECT COUNT(title) FROM article WHERE title

LIKE :term1

from 값은 SQL의 OFFSET 절과 함께 사용되어 지정된 수만큼의 일치하는 결과가 나온 다음에 결과 세트에 결과를 추가하기 시작해야 한다고 데이터베이스에 알린다.

OR summary LIKE :term2 OR content LIKE :term3 AND published = 1;

472

PART III 데이터베이스 기반의 웹사이트

LIMIT :show OFFSET :from

FROM

search.php?term=design search.php?term=design&show=3&from=3 search.php?term=design&show=3&from=6 search.php?term=design&show=3&from=9

SHOW

PAGE

( 0

÷

3 )

+

1

=

1

( 3

÷

3 )

+

1

=

2

( 6

÷

3 )

+

1

=

3

( 9

÷

3 )

+

1

=

4

페이징 처리 링크를 생성하려면 검색 페이지에 세 가지

현재 페이지를 결정하기 위해, $from(건너뛸 결과의 수)을

데이터가 필요하다. 각 값은 변수에 저장된다.

$show(페이지당 결과의 수)로 나누고 1을 더한다. 현재 페이지를 결정하기 위한 계산은 앞에 표시되었다.

• $count 쿼리와 일치하는 결과의 수 • $show 페이지당 표시할 결과의 수 • $from 결과 세트에 일치하는 항목을 추가하기 전에 건너뛰어야 하는 결과의 수

$current_page = ceil($from / $show) + 1;

for 루프는 페이징 링크를 만들기 위해 사용된다. 카운터를 1로 설정하고 카운터가 전체 페이지의 수보다

결과를 표시하는 데 필요한 페이지 수를 계산하기 위해,

적은지 확인한다. 만약에 그렇다면 페이지에 대한 링크를

$count(일치하는 수)를 $show(페이지당 표시되는 결과의 10이고 페이지당

추가하고 카운터를 증가시킨다. for 루프는 결과를

수)로 나눈다. 앞의 경우, 일치하는 수가

표시하는 데 필요한 전체 페이지 수에 카운터가 도달할

표시되는 수는 3이다. 10 ÷ 3 = 3.3333이고 결과를

때까지 실행된다.

표시하는 데 필요한 페이지 수를 구하기 위해 PHP의 ceil() 함수를 사용하여 반올림을 한다. $total_pages = ceil($count / $show);

for ($i = 1; $i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.