옮긴이 머리말 v
베타리더 후기 vii
시작하며 1
PART I 기본 프로그래밍 명령 17
소프트웨어 설치하기 / 샘플 코드 다운로드하기 / PHP 페이지에 HTML과 PHP 코드를 혼합하는 방법 / PHP가 브라우저에 텍스트와 HTML을 보내는 방법 / 페이지에 콘텐츠 쓰기 / 주석 / 코드에 주석 추가하기
1장 변수, 표현식 그리고 연산자 29
변수 / 변수 생성하고 접근하기 / 변수명을 지정하는 방법 / 스칼라(기본) 데이터 타입 / 변숫값 업데이트하기 / 배열 / 연관 배열 / 연관 배열 생성하기 및 접근하기 / 인덱스 배열 / 인덱스 배열 생성하고 접근하기 / 배열 안에 배열 저장하기 / 다차원 배열 / echo에 대한 간단 표기법 / echo의 간단 표기법 사용하기 / 표현식 그리고 연산자 / 산술 연산자 / 산술 연산자 사용하기 / 문자열 연산자 / 문자열 결합하기 / 비교 연산자 / 논리 연산자 / 비교 연산자 사용하기 / 논리 연산자 사용하기 / 타입 저글링: 데이터 타입 변환하기 / 기본 PHP 페이지 / 데이터 처리하고 출력하기 / 요약
2장 제어 구조 67
조건문 / 중괄호는 코드 블록을 형성한다 / 조건문의 구조 / if 문 사용하기 / 삼항 연산자 / 삼항 연산자 사용하기 / if... elseif 문 사용하기 / switch 문 사용하기 / match 표현식 사용하기 / 루프 / while 루프 / while 루프 사용하기 / do… while 루프 / do… while 루프 사용하기 / for 루프 / 세 가지 표현식으로 for 루프 사용하기 / for 루프 사용하기 / foreach 루프 / 키와 값을 통한 루프 / 인클루드 파일을 사용하여 코드 반복하기 / 파일 include 그리고 require / 인클루드 파일 생성하기 / 인클루드 파일 사용하기 / 예제 / 요약
3장 함수 103
함수 사용하기 / 함수 정의하고 호출하기 / 기본 함수 / 코드가 항상 순서대로 실행되는 것은 아니다 / 함수에서 데이터 가져오기 / 값을 반환하는 함수 / 정보가 필요한 함수 정의하기 / 정보가 필요한 함수 호출하기 / 매개변수를 사용하는 함수 / 함수 이름 짓기 / 범위 / 범위에 대한 데모 / 전역 변수와 정적 변수 / 함수 외부의 변수에 접근하기 / 함수와 복합 데이터 타입 / 여러 값 받기와 반환하기 / 인수와 반환 타입 선언 / 타입 선언 사용하기 / 엄격한 타입 활성화하기 / 엄격한 타입 사용하기 / 여러 개의 반환 구문 / 함수에서 여러 개의 반환 구문 사용하기 / 옵셔널 매개변수와 디폴트값 / 매개변수에 대한 디폴트값 사용하기 / 지정 인수 / 지정 인수 사용하기 / 함수 작성에 대한 접근방법 / 함수를 왜 사용하나? / 함수 문서화하기 / 예제 / 요약
4장 객체 & 클래스 143
모델로서의 웹사이트 / 속성 & 메서드 / 객체 데이터 타입 / 클래스는 객체 생성을 위한 템플릿이다 / 객체를 생성하는 방법과 사용하는 방법 / 클래스: 객체에 대한 템플릿 / 클래스를 사용하여 객체 생성하기 / 속성에 접근하고 업데이트하기 / 객체와 속성 사용하기 / 메서드 정의하고 호출하기 / 객체의 메서드 사용하기 / 생성자 메서드 / 클래스와 생성자 사용하기 / 속성과 메서드의 가시성 / 게터 그리고 세터 사용하기 / 객체의 속성에 배열 저장하기 / 객체의 속성으로 배열 사용하기 / 객체의 속성에 객체 저장하기 / 객체의 속성으로 객체 사용하기 / 객체 사용의 이점 / 예제 / 요약
PART II 동적 웹 페이지 177
HTTP 요청과 응답 / HTTP GET과 POST를 사용하여 데이터를 보내는 방법 / 링크 또는 폼으로 데이터를 보내는 방법 / 서버와 주고받는 데이터 보안 / 인코딩 스킴 / PHP 인터프리터의 내장 툴킷 / 슈퍼글로벌 배열 / $_SERVER 슈퍼글로벌 배열의 데이터 / 변수 데이터를 보여주는 내장 함수 / 변수의 내용 표시하기 / 오류 메시지 / 오류 메시지 예제 / PHP 인터프리터에 대한 설정 및 옵션 / PHP 인터프리터에 대한 설정 보기 / 인터프리터 설정 변경하기: php.ini / 서버 설정 변경하기: .htaccess
5장 내장 함수 201
대문자 & 소문자 길이 확인하기 / 대소문자 변환하기와 문자 계수하기 / 문자열에서 문자 찾기 / 문자열에 있는 문자 확인하기 / 문자 제거하기와 교체하기 / 문자열의 문자 바꾸기 / 멀티바이트 문자열 함수 / 멀티바이트 문자열 함수 사용하기 / 정규 표현식 / 정규 표현식 함수 / 정규 표현식 사용하기 / 숫자로 작업하기 / 숫자 함수 / 배열로 작업하기 / 배열 함수 / 배열에 항목 추가하기와 제거하기 / 배열 업데이트 함수 / 배열 정렬하기(순서 변경하기) / 배열 정렬 함수 / 상수 / 상수 사용하기 / HTTP 헤더 추가하기 또는 업데이트하기 / HTTP 헤더를 사용하여 사용자 리디렉션하기 / 파일에 대한 데이터 및 파일 삭제하기 / 파일 정보 얻기 / 요약
6장 브라우저로부터 데이터 가져오기 231
데이터를 수집하고 사용하는 네 가지 단계 / HTTP GET을 통해 데이터 전송받기 / 쿼리 문자열을 사용하여 콘텐츠 선택 / 슈퍼글로벌 배열에 누락된 데이터 처리하기 / 쿼리 문자열을 사용하여 콘텐츠 선택하기 / 데이터 유효성 검증하기 / 쿼리 문자열 데이터 검증하기 / 데이터가 누락된 경우 오류 페이지 표시하기 / 방문자를 오류 페이지로 보내기 / 결과 이스케이핑 / 이스케이핑을 하지 않은 위험 / 예약된 HTML 문자 이스케이핑하기 / 사용자가 제공하는 콘텐츠 이스케이핑 / 폼 데이터가 서버로 전송되는 방법 / 폼 데이터 가져오기 / 폼 데이터를 수신하는 방법 / 폼이 제출되었는지 확인하는 방법 / 폼이 제출되었는지 확인하기 / 숫자 유효성 검사하기 / 숫자가 유효한지 확인하기 / 텍스트 길이 유효성 검사하기 / 텍스트 길이 확인하기 / 정규 표현식을 사용하여 데이터 유효성 검사하기 / 비밀번호 길이 검사하기 / 셀렉트 박스와 라디오 버튼 / 옵션 확인하기 / 체크박스가 체크되었는지 확인하는 방법 / 체크박스 확인하기 / 여러 값이 유효한지 확인하기 / 폼 검증하기 / 필터 함수를 사용하여 데이터 수집하기 / 데이터를 수집하기 위해 필터 함수 사용하기 / 유효성 검사 필터 / 단일값을 확인하기 위해 필터 사용하기 / 필터를 사용하여 값을 수집하기 / 여러 입력을 검증하기 위한 필터 / 필터로 여러 입력을 검증하기 / 변수를 가지고 동작하는 필터 함수 / 변수의 데이터 검증하기 / 필터, 플래그, 그리고 옵션 검증 / 제거 필터 / 변수에 제거 필터 적용하기 / 필터를 사용하여 폼 검증하기 / 요약
7장 이미지 & 파일 285
브라우저에서 파일 업로드하기 / 서버에서 파일 받기 / 파일이 업로드되었는지 확인하기 / 파일을 목적지로 이동하기 / 업로드된 파일 이동하기 / 파일명과 중복 파일 정리하기 / 파일 크기와 파일 타입 확인하기 / 파일 업로드 검사하기 / 이미지 크기 조절하기 / 이미지 자르기 / 확장 프로그램을 사용하여 이미지 편집하기 / GD를 사용하여 이미지 크기 조절하기 / Imagick로 크기 조절하고 자르기 / 요약
8장 날짜 & 시간 309
날짜 형식 / 시간 형식 / 문자열을 사용하여 날짜 및 시간 지정하기 / 유닉스 타임스탬프 / 날짜 내장 함수와 시간 내장 함수 / 날짜 함수 / 날짜와 시간을 나타내는 객체 / DateTime 객체 / DateTime 객체의 날짜와 시간 업데이트하기 / DateTime 객체에 날짜와 시간을 설정하는 방법 / DateInterval을 사용하여 간격 나타내기 / DateInterval 객체 / DatePeriod를 사용하는 반복 이벤트 / DatePeriod 객체 / DateTimeZone을 사용하여 타임존 관리하기 / DateTimeZone 객체 / 요약
9장 쿠키 & 세션 329
쿠키란 무엇인가? / 쿠키 생성과 접근 방법 / 쿠키 설정하고 접근하기 / 쿠키 보안 / 쿠키 설정 제어하기 / 세션이란 무엇인가? / 세션을 생성하고 접근하는 방법 / 세션에 데이터를 저장하고 접근하기 / 세션의 수명 / 기본 로그인 시스템 / 사용자가 페이지를 조회하기 위해 로그인하도록 하는 방법 / 요약
10장 오류 처리 349
PHP 오류가 표시되는 방법 제어하기 / 오류 메시지 이해하기 / 오류의 레벨과 유형 / 구문 오류 / 치명적인 오류 / 치명적이지 않은 오류(경고 또는 알림) / 디버깅: 오류 추적하기 / 사이트 활성화하기 / 오류 처리 함수 / 치명적이지 않은 에러 핸들링 함수 / 예외 / try… catch로 예외 처리 / 디폴트 예외 처리 함수 / try… catch를 사용하여 예외 처리하기 / 커스텀 예외 발생하기 / 서로 다른 예외 타입 캐치하기 / 디폴트 오류와 예외 처리하기 / 웹 서버 오류를 표시하는 방법 / 요약
PART III 데이터베이스 기반의 웹사이트 381
예제 웹사이트 소개 / 관계형 데이터베이스가 데이터를 저장하는 방법 / 데이터베이스에서의 데이터 타입 / 데이터베이스의 데이터 복제하지 않기 / MySQL 작업을 위해 phpMyAdmin 사용하기 / 데이터베이스를 관리하기 위해 phpMyAdmin 사용하기 / 샘플 데이터베이스 설정하기 / 샘플 데이터베이스 둘러보기 / 데이터베이스 사용자 계정 생성하기
11장 구조화된 쿼리 언어 397
데이터베이스에서 데이터 가져오기 / 테이블에서 특정 행 반환하기 / SQL에서 비교 연산자 사용하기 / LIKE와 와일드카드로 결과 검색하기 / 값에 대해 검색하기 / 결과 세트의 행 순서 제어하기 / 결과 정렬하기 / 결과를 카운팅하고 그룹핑하기 / 일치하는 결과의 수 카운팅하기 / 결과 제한하기 및 건너뛰기 / 일치하는 결과의 수 제한하기 / 두 테이블에서 데이터를 가져오기 위해 JOIN 사용하기 / 데이터가 누락된 경우 JOIN이 동작하는 방식 / 여러 테이블에서 데이터 가져오기 / 다중 JOIN 사용하기 / 앨리어스 / 열 이름에 대한 앨리어스 사용하기 / 열 결합하기 & NULL 대체하기 / CONCAT 그리고 COALESCE / 예제 CMS를 위한 기사 쿼리 / 데이터베이스에 데이터 추가하기 / 데이터베이스의 데이터 업데이트하기 / 데이터베이스에서 데이터 삭제하기 / 고유성 제약 / 외래 키 제약 / 요약
12장 데이터베이스에서 데이터 가져오기 & 표시하기 433
데이터베이스에 연결하기 / 데이터베이스 연결은 인클루드 파일에 둘 수 있다 / 하나의 PHP 파일이 서로 다른 데이터를 표시하는 방법 / SQL 쿼리를 사용하여 데이터 가져오기 / 데이터베이스에서 하나의 데이터 행 가져오기 / 쿼리가 데이터를 반환했는지 확인하기 / 데이터베이스에서 여러 행의 데이터 가져오기 / 한 번에 한 행의 데이터를 가져오기 위해 루프 돌기 / SQL 쿼리에 변경할 수 있는 데이터 사용하기 / 동일한 페이지에 서로 다른 데이터 표시하기 / SQL 쿼리에 값 바인딩 / SQL 쿼리에 정수 바인딩하기 / 단일 파일을 사용하여 여러 페이지 표시하기 / 쿼리 문자열을 사용하여 올바른 페이지 표시하기 / HTML 페이지에서 데이터베이스 데이터 표시하기 / HTML 페이지에서 사용되는 데이터 형식 지정하기 / SQL 문을 실행하는 함수 / 매개변수가 없는 사용자 정의 PDO 함수 / 매개변수가 있는 사용자 정의 PDO 함수 / 몇 개의 PHP 파일로 전체 사이트를 운영하는 방법 / 헤더와 푸터 파일 / 홈페이지 / 카테고리 페이지 / 기사 페이지 / 회원 페이지 / 검색 기능 만들기 / 검색 페이지 / 데이터를 객체로 가져오기 / 객체를 가져오기 위해 페치 모드 설정하기 / 클래스를 사용하여 객체에 있는 데이터 가져오기 / 존재하는 클래스를 사용하여 객체 생성하기 / 요약
13장 데이터베이스의 데이터 업데이트하기 483
테이블에 데이터 추가하기 / 테이블의 데이터 업데이트하기 / 테이블에서 데이터 삭제하기 / 새로운 데이터 행의 아이디 가져오기 / 얼마나 많은 행이 변경되었는지 알아보기 / 열에 값이 중복되는 것을 방지하기 / 데이터베이스 데이터를 편집하기 위한 웹 페이지 생성하기 / 카테고리 생성하기, 업데이트하기, 그리고 삭제하기 / 데이터 생성하고 업데이트하기 / 카테고리 데이터 가져오고 유효성 검사하기 / 카테고리 데이터 저장하기 / 카테고리 데이터를 생성 또는 편집하기 위한 폼 / 카테고리 삭제하기 / 기사 생성하고 편집하기 / 트랜잭션: 여러 개의 SQL 문 / 기사: 페이지 설정하기(파트 A) / 기사: 데이터 가져오고 유효성 검사하기(파트 B) / 기사: 변경사항 저장하기(파트 C) / 기사: 폼/메시지(파트 D) / 기사 삭제하기 / 요약
PART IV 샘플 애플리케이션 확장하기 521
절대 경로와 상대 경로 / 파일 구조와 도큐먼트 루트 / 구성 파일 / BOOTSTRAP 파일 / 변수가 데이터를 저장하는 방법
14장 리팩터링 & 종속성 주입 533
데이터베이스 작업을 위한 객체 사용하기 / Database 객체 / 컨테이너 객체 / CMS 컨테이너 객체 / Database 클래스 / Category 클래스 / 카테고리 생성하기, 업데이트하기, 삭제하기 / 기사 데이터 가져오기 / CMS 객체 사용하기 / 코드 리팩터링 방법 / 클래스 오토로딩하기 / 정적 메서드를 사용하는 유효성 검증 클래스 / 요약
15장 네임스페이스 & 라이브러리 557
네임스페이스 생성하기 / 네임스페이스에 있는 코드 사용하기 / CMS 클래스에서 네임스페이스 사용하기 / 네임스페이스로 코드 가져오기 / 클래스를 현재의 네임스페이스로 가져오기 / 라이브러리 사용하는 방법 / Composer와 패키지 사용하기 / Packagist: 패키지의 디렉터리 / Composer와 패키지 설치하기 / Composer를 사용하여 패키지를 관리하기 / HTML Purifier: HTML 콘텐츠 허용하기 / CMS에 HTML Purifier 추가하기 / TWIG: 템플릿 엔진 / 템플릿을 렌더링하기 위해 TWIG 객체 사용하기 / TWIG 옵션 / 전역 변수와 익스텐션 / TWIG 객체를 생성하기 위해 BOOTSTRAP 사용하기 / PHP 페이지 업데이트하기 / 데이터를 가져오고 렌더링하는 PHP 파일 / TWIG 템플릿의 데이터 접근하기 / TWIG 템플릿에 데이터 표시하기 / TWIG 템플릿에 조건 사용하기 / TWIG 템플릿에서 루프 사용하기 / 템플릿 파일을 구조화하는 방법 / 부모 및 자식 카테고리 템플릿 / 기사 요약 템플릿 / 기사 템플릿 / PHPMailer를 사용하여 이메일 보내기 / SMTP 서버에 연결하기 위해 설정하기 / 이메일 생성하고 전송하기 / 이메일을 생성하고 전송하는 클래스 / Email 클래스 사용하기 / 요약
16장 멤버십 603
데이터베이스 업데이트하기 / 사용자 등록하기 / 비밀번호 해시 / 해시된 비밀번호 생성하고 확인하기 / 새로운 회원 등록하기(파트 1) / 새로운 회원 등록하기(파트 2) / 로그인과 개인화 / 로그인하기(파트 1) / 로그인하기(파트 2) / 사용자 데이터를 저장하기 위해 세션 사용하기 / 내비게이션 바 개인화하기 / 회원의 프로필 페이지에 옵션 추가하기 / 어드민 페이지에 대한 접근 제한하기 / 데이터베이스와 토큰을 업데이트하는 이메일 링크 / 데이터베이스에 토큰 저장하기 / 비밀번호 재설정 요청하기 / 비밀번호 재설정하기 / 요약
17장 기능 추가하기 633
SEO 친화적인 URL / 업데이트된 파일 구조 / SEO 친화적인 URL 구현하기 / URL rewriting / URL 업데이트하기 / 요청 처리하기 / SEO 이름 생성하기 / SEO 이름 저장하기 / SEO 친화적인 이름을 가진 페이지 표시하기 / 새로운 기능 계획하기 / 댓글 저장하기 / 좋아요 저장하기 / 좋아요 & 댓글 수와 함께 요약 표시하기 / 좋아요 추가하고 제거하기 / 기사에 댓글 추가하기 / 기사 페이지 템플릿 업데이트하기 / 요약
찾아보기 663