214
코코 코코코코코코 코코코 코코코코 코코코코코. 코코코코코코코(코코 CI)코 PHP 코 코코코코 코코코코코 코코코코코 코코 코코코코 코코 코코 코코코 코코 코코코. CI 코 코코코 코코 코코코 코코 코코코 코코코코코,코코 코코코코코 코 코코코코코 코코코코코코 코코코코코 코코코 코코코코코코코코. CI 코 코코코 코코코코 코코코 코코코 코코 코코코코코 코코코코 코코코 코코코코코코. 코코코코코코코코 코코코 코코코코코? 코코코코코코코코 코코 코코 코코코 코코코 코코코코: 코코코코코코 코코코코코코 코코코코코코 코코코. 코코코 코코코코 코코코 코코코. 코코코 코코코코코,코코코 PHP 코코코코 코코코코코 코코코코 코코코. 코코 코코코 코코코코 코코코코코코 코코코. 코코코코코코코 코코코 코코코 코코코 코코 코코코코코코 코코코. 코코코코 코코 코코코 코코 코코코코코코 코코코. PEAR 코코 코 코코코코코코 코코 코코코코코코코. 코코코 코코코 코코코 코코코코코 코코. 코코코코 코코 코코코 코코코코 코코코코. 코코코코 코코코코코 코코코코코코코코 코코코코 코코코. 코코 코코코코 Server Requirements PHP version 5.1.6 코코. 코코 코코코코코 코코코코코코코 코코코코코.코코 코코코코 코코코코코코코 코코코 코코코코. MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite, and ODBC.

Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

  • Upload
    ledung

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

코드 이그나이터의 세계에 오신것을 환영합니다.

코드이그나이터(이하 CI)는 PHP 를 이용하여 웹사이트를 구축하고자 하는 사람들을 위한 개발 프레임 워크 입니다. CI 는 날코딩 하는 분들을 위해 풍부한 라이브러리,쉬운 인터페이스 및 쉬운로직을 제공함으로써 개발속도를 무쟈게 높혀드릴것입니다. CI 는 님들이 최소한의 코딩만 하도록 하여 프로젝트에 집중할수 있도록 해드릴거예요.  

코드이그나이터는 누구를 위한것인가?

코드이그나이터는 바로 이런 여러분 모두의 것입니다:

최소노력으로 사용할수있는 프레임워크를 원한다. 놀라운 프로그램 성능을 원한다. 다양한 호스팅환경,다양한 PHP 버전에서 사용가능한 호환성을 원한다. 거의 설정이 필요없는 프레임워크를 원한다. 커맨드라인에서 뭔가를 입력할 필요가 없는 프레임워크를 원한다. 제한적인 코딩 규칙이 없는 프레임워크를 원한다. PEAR 같이 큰 라이브러리를 별로 좋아하지않는다. 템플릿 언어를 억지로 배우고싶지 않다. 복잡한것 대신 심플한 솔루션을 좋아한다. 명확하고 전체내용을 몽땅다설명해주는 설명서를 원한다.

서버 요구사항 Server Requirements PHP version 5.1.6 이상. 통상 웹개발에는 데이터베이스가 요구됩니다.현재 지원되는 데이터베이스는 다음과 같습니다.

   MySQL (4.1+), MySQLi, MS SQL, Postgres, Oracle, SQLite, and ODBC.

Page 2: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CodeIgniter License AgreementCopyright (c) 2008 - 2011, EllisLab, Inc.All rights reserved.This license is a legal agreement between you and EllisLab Inc. for the use of CodeIgniter Software (the "Software"). By obtaining the Software you agree to comply with the terms and conditions of this license.

Permitted Use

You are permitted to use, copy, modify, and distribute the Software and its documentation, with or without modification, for any purpose, provided that the following conditions are met:

1. A copy of this license agreement must be included with the distribution.2. Redistributions of source code must retain the above copyright notice in all

source code files.3. Redistributions in binary form must reproduce the above copyright notice in

the documentation and/or other materials provided with the distribution.4. Any files that have been modified must carry notices stating the nature of the

change and the names of those who changed them.5. Products derived from the Software must include an acknowledgment that

they are derived from CodeIgniter in their documentation and/or other materials provided with the distribution.

6. Products derived from the Software may not be called "CodeIgniter", nor may "CodeIgniter" appear in their name, without prior written permission from EllisLab, Inc.

Indemnity

You agree to indemnify and hold harmless the authors of the Software and any contributors for any direct, indirect, incidental, or consequential third-party claims, actions or suits, as well as any related expenses, liabilities, damages, settlements or fees arising from your use or misuse of the Software, or a violation of any terms of this license.

Disclaimer of Warranty

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF QUALITY, PERFORMANCE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.

Limitations of Liability

Page 3: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

YOU ASSUME ALL RISK ASSOCIATED WITH THE INSTALLATION AND USE OF THE SOFTWARE. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS OF THE SOFTWARE BE LIABLE FOR CLAIMS, DAMAGES OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE. LICENSE HOLDERS ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USE AND ASSUME ALL RISKS ASSOCIATED WITH ITS USE, INCLUDING BUT NOT LIMITED TO THE RISKS OF PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS.

명예 CreditsCodeIgniter 는 Rick Ellis (Ellislab, Inc. 의 CEO )에 의해 최초로 개발되었습니다.본 프레임워크는 ExpressionEngine 의 기반코드에서 많은것을 빌려와 여러가지 클래스 라이브러리,헬퍼,하위시스템등을 구성하였으며, 실재상황에서 최상의 성능을 내기위해 만들어 졌습니다.

현재는 개발 및 유지보수를 ExpressionEngine 개발팀이 맡고 있습니다.

Ruby on Rails 의 걸출한 업적이 우리에게 PHP 프레임워크를 만들도록 영감을 주었으며, 웹 커뮤니티에게 프레임워크가 일반적이라는 인식을 가질 수 있도록 해 주었습니다.

설치 절차 Installation InstructionsCodeIgniter 설치는 다음 4 단계를 거칩니다:

1. 다운받은 파일의 압축을 푼다.2. CodeIgniter 를 서버에 업로드한다. 일반적으로 index.php 을 홈페이지 루트에 오도록

해야 한다.3. application/config/config.php 파일을 열어 기반 url(base URL)을 세팅한다.

암호화나 세션을 사용하려면 암호키(encryption key)를 설정한다.4. 데이터베이스를 사용한다면 application/config/database.php 파일을 열어서

데이터베이스 정보를 세팅한다.

system 폴더의 이름을 변경하여 보안을 강화할수 있습니다. 만약 변경한다면 반드시 메인 index.php 파일을 열어 맨위에 있는 $system_folder 변수와 $application_folder 변수의 값을 새 폴더 이름을 바꿔야합니다.

보안으로 가장 좋은 방법은, system 및 application 폴더를 브라우저에서 직접 액세스할 수없는 위치에 옮기는 것입니다. 기본적으로 각 폴더에 .htaccess 파일이 존재니다만, 서버설정에 따라서 동작하지않을 수 도 있으므로, 브라우저에서 접근 불가능한 경로에두는것이 가장 좋습니다.

추가 대책으로 프로덕션 환경에서 PHP 오류보고와 다른 개발 기능을 비활성화했습니다. 비활성화는 ENVIRONMENT 설정을 통해 이루어졌으며 자세한 내용은 보안 클래스 를 확인하십시오. 

끝 !

Page 4: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CodeIgniter 를 처음 시작하신다면 시작하기 부분을 먼저 읽어보시길 권합니다.

그럼 지금부터 신나는 프로그램을 즐겨 주세요!

설계의 목적 Design and Architectural Goals

CodeIgniter 는극한의 성능, 적용성, 최소성 ,유연성,가벼움 을 목적으로 설계되었습니다.

이 목적을 만족시키기위해서 벤치마킹,리펙토링,단순화하기 등을 개발의 전 과정에서 수행하였습니다.

그리고, 이 목적에 맞지않는것은 단호히 제거하였습니다.  

기술적,설계적 관점에서 CodeIgniter 는 다음의 목표를 따릅니다.

동적인 작동(Dynamic Instantiation). CodeIgniter 에서 컴포넌트들은 글로벌이 아니라 오직 사용자가 필요할때만 로드되어 사용됩니다.어떤 기능이 필요할지 미리 짐작하지않으므로 매우 가벼운 상태를기본으로 하고있습니다.님하가 작성하신 컨트롤러와 뷰는 HTTP 요청이 발생할때 비로소 무엇이 호출될지를 결정합니다.

느슨한 결합( Loose Coupling). 결합(Coupling)이란 어떤 컴포넌트가 어떤컴포넌트에 의존하는가 하는 수준을 말합니다. 적은 컴포넌트 의존은 더욱 유연하고 재사용 가능한 시스템이 되게합니다.우리 목표는 대단히 느슨하게 결합된 시스템 입니다.

컴포넌트 단일성(Component Singularity). 단일성이란 컴포넌트가 얼마나 목적에만 집중하는가에대한 수준을 말합니다. CodeIgniter 에서는 사용성을 극대화하기 위하여 각 클래스와 함수가 대단히 그 고유기능에 집중되어 만들어져 있습니다.  

위 목표로 인하여 CodeIgniter 는 작은 패키지 이면서도 단순성,유연성,고가용성을 달성하기위해 노력하고있습니다.

CI 동작 개념도 Application Flow Chart아래 그림은 CI 사용시 데이터의 흐름을 보여줍니다(화살표를 따라가면서 설명을 읽어보세요):

Page 5: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

1. The index.php 는 프론트콘트롤러(front controller)로 동작하여 CI 가 동작하기 위한 기반리소스들을 초기화 합니다.

2. 라우터모듈(Routing)은 http 요청을 분석하여 어떤 동작을 해야할지를 결정합니다.3. 캐쉬파일이 있다면 그파일을 바로 브라우저로 보내고 일반적인 동작절차는 무시합니다.4. 보안모듈(Security)은 프로그램 컨트롤러가 로딩 되기전에 HTTP 요청및 어떤 사용자

전송데이터든지 모두 필터링합니다.5. 컨트롤러(Application controller)는 사용자 요청을 처리하기 위해 모델을 로드하고,

코어라이브러리,헬퍼 및 필요한 다른 리소스들을 로드 합니다.6. 최종적으로 뷰모듈(View)이 렌더링되어 브라우저로 전송됩니다. 캐싱이 활성화

되어이다면 먼저 캐쉬(Cashing)하여 다음번 요청에 사용할 수 있도록 합니다.

CodeIgniter 한눈에 둘러보기 CodeIgniter at a Glance

CodeIgniter 는 프레임워크 입니다

CodeIgniter 는 PHP 를 이용하여 웹사이트를 개발하고자하는 사람들을 위한 도구모음 입니다. 날코딩을 하고계셨다면 님하의 개발속도를 훨씬 향상시켜줄 것입니다. 이를 위해 CI는 일반적 작업에 사용되는 풍부한 라이브러리를 제공합니다. 게다가 라이브러리사용은 논리적이며 쉬운 인터페이스를 제공합니다.CI 는 최소코딩만 필요하게 하므로써 님하의 생산성을 향상시켜주는데 촛점이 맞춰져 있습니다.

CodeIgniter 는 무료입니다

CodeIgniter 는 Apache/BSD 스타일의 오픈소스 라이센스를 채택하고있습니다. 더 자세한 정보는 라이센스 페이지를 참고하세요 .

CodeIgniter 는 가볍습니다

Page 6: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

엄청 가볍습니다. 코어시스템은 겨우 몇개의 작은 라이브러리만 사용합니다. 이점은 다른 수많은 프레임워크들이 엄청난 리소스를 요구하는것과 뚜렷하게 대조됩니다. 추가적인 라이브러리는 필요할때만 동적으로 로드하시면 됩니다

CodeIgniter 는 빠릅니다

겁나빠릅니다. CodeIgniter 보다 빠른 프레임워크를 찾으신다면 오백원 드릴께요 .(미국으로 비행기타고오삼)

CodeIgniter 는 M-V-C 패턴에 기반합니다

CodeIgniter 는 모델-뷰-컨트롤러 패턴을 사용합니다. 비즈니스로직 계층과 표현계층이 분리되어있으므로 ,디자이너와 같이 일하실때 템플릿파일에는 최소한의 프로그램코드만 들어갈것입니다.

CodeIgniter 는 깔끔한 URL 을 생성합니다

CodeIgniter 에서 생성한 URL 은 깔끔하고 검색엔진에서 색인되기 좋은 구조입니다. 일반적인 쿼리스트링 기반의 URL 이 아니라 세그먼트 기반의 URL 을 사용합니다.

example.com/news/article/345

위의경우 기본으로 index.php 가 URL 에 포함되어있으나 , 간단히 .htaccess 파일을 사용하여 제거할수 있습니다.

CodeIgniter 는 굉장히 위력적입니다

CodeIgniter 는 일반적인 웹작업의 대부분을 커버하는 라이브러리를 제공합니다. 예를들어 database 접근,email 전송, form 데이터검증(validation),세션관리, 이미지 처리, XML-RPC 사용등을 제공합니다

 

CodeIgniter 는 확장 가능합니다

직접만든 라이브러리나 헬퍼 사용하여 손쉽게 확장할수있습니다.

혹은 클래스확장이나 시스템 후킹을 통해서도 확장가능합니다.

CodeIgniter 는 템플릿 엔진이 필요없습니다

Page 7: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CodeIgniter 가 심플한 템플릿파서를 포함하고있긴하지만, 반드시 사용할 필요는 없습니다. 템플릿엔진은 PHP 문법과 간단히 매치되지않기 때문에 거의 PHP 를 배우는 만큼의 학습노력이 필요합니다.

아래 코드를 보시죠.

<ul>

<?php foreach ($addressbook as $name):?>

<li><?=$name?></li>

<?php endforeach; ?>

</ul>

아래는 템플릿 엔진을 사용할 경우 입니다

<ul>

{foreach from=$addressbook item="name"}

<li>{$name}</li>

{/foreach}

</ul>

맞습니다 맞구요.

Page 8: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

템플릿엔진쪽이 쬐금 더 깨끗해보이긴합니다. 그러나 위 코드는 반드시 재해석의 과정을 거쳐야하기 때문에 성능이 떨어집니다. 우리의 목표는 최대의 성능이기 때문에 템플릿엔진을 사용하지 않습니다.

CodeIgniter 는 완벽하게 문서화 되어있습니다

개발자는 코드를 사랑하지 문서작성을 사랑하진 않습니다. 물론 우리도 별로 다르지않습니다.

그렇지만, 문서도 코드 자체만큼 중요하기 때문에 우리는 문서를 만들었답니다. 물론 코드도 깨끗할 뿐 아니라주석처리도 잘되었구요 .

CodeIgniter 는 친절한 사용자 커뮤니티가 있습니다.

포럼으로 오세요 -->Community Forums.

모델 뷰 컨트롤러 Model-View-ControllerCodeIgniter 는 모델-뷰-컨트롤러(MVC) 개발 패턴에 기반합니다. MVC 는 프로그램의 로직을 프리젠테이션(표현부분)로부터 분리하는 소프트웨어 접근 방법론 입니다. 실재로, 이것은 여러분의 웹페이지에 최소한의 스크립트만 들어가도록 해 줍니다.

Model 은 데이터구조를 표현합니다. 일반적으로 모델 클래스는 데이터를 추출,입력,갱신하는등의 함수를 포함하게 됩니다.

View 는 사용자에게 보여질 부분을 표현합니다. 뷰(View)는 일반적으로 웹페이지만,CodeIgniter 에서는 뷰가 헤더나 푸터처럼 웹페이지의 조각일 수도 있습니다. 또한 RSS 페이지나, 혹은 다른 페이지 형태의 것일 수 있습니다.

Controller 는 일반적으로 모델과 뷰(혹은 HTTP 요청을 처리하여 웹페이지를 생성하는 어떤 것)사이에서 동작합니다.

CodeIgniter 는 모델이 필요없도록 MVC 를 매우 느슨하게 접근하였습니다. 만약 모델을 분리할 필요가 없거나, 모델을 따로 분리하는것이 쓸데없이 복잡도를 증가시킨다면, 컨트롤러와 뷰 파일만으로 프로그램을 만드실 수 있습니다. CodeIgniter 는 여러분이 이미 가지고 있는 스크립트를 연동해서 사용하거나, 여러분의 기호에 맞게 시스템 코어라이브러리를 개발하여 쓸수도 있도록 했습니다.

CodeIgniter Cheatsheets

Library Reference

Page 9: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Helpers Reference

CodeIgniter 살펴보기

아래 페이지에서 CodeIgniter 에 녹아있는 컨셉을 확인하세요:

훑어보기

지원되는 특징

프로그램 순서도

MVC 아키텍처 설명

설계의 목표

Package Description

제공하는 기능목록(특징)CodeIgniter Features특징만으로는 어플리케이션이 얼마나 쓰기좋고 똑똑하게 디자인되어있는지 알지못합니다.

특징은 코드의 품질이나 성능, 실용적 보안등을 판단하는데도 별 도움이 못됩니다.

어플리케이션이 좋은지 어떤지 알아보는 유일한 방법은 써보는것입니다.

CodeIgniter 를 설치하는것은 거의 애들 장난만큼 쉽기 때문에 직접 써보실것을 권장드립니다.

Page 10: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

 

모델-뷰-컨트롤러 기반

엄청 가벼움

여러플렛폼을 지원하는 완벽한 데이터베이스 클래스들

액티브레코드(Active Record Database) 지원

폼과 데이터의 검증

보안과 XSS 필터링

세션 관리

Email 전송클래스. 첨부파일지원.HTML/Text 지원.다양한프로토콜 지원(sendmail, SMTP, and Mail) 등.

이미지 관리 라이브러리(자르기,크기조절,돌리기 등).GD , ImageMagick, NetPBM 지원

파일 업로드 클래스

FTP 클래스

로컬라이즈(Localization) 페이지네이션

데이터암호화

벤치마크

전체페이지 캐싱

에러로깅

성능측정(Application Profiling) 캘린더클래스

User Agent 클래스

Zip 압축

템플릿엔진

트랙백(Trackback) XML-RPC 라이브러리

단위테스트

검색엔진에 색인되기 좋은 URLs 유연한 URI 라우팅

후킹,클래스확장 지원

방대한 헬퍼 라이브러리

시작하기 Getting Started With CodeIgniter

Page 11: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

어떤 프로그램이라도 배우기위해서는 어느정도 노력이필요합니다. 즐거운 개발을 위해 우리는 배울것을 최소화하도록 노력했습니다.

먼저 CodeIgniter 를 설치하신후 CI 소개 항목을 읽어주세요.

다음으로 일반 토픽 항목을 순서대로 읽어주세요 . 각항목은 이전항목을 기반으로 전개됩니다. 그리고 포함되어있는 코드샘플은 따라해 보시길 권장합니다.

기본을 이해하셨다면 이제 클래스 레퍼런스와 헬퍼 레퍼런스를 읽으실 준비가 되신겁니다.

위 두가지 레퍼런스에서 어떻게 라이브러리와 헬퍼파일들을 활용하실지 알게 되실겁니다.

문제나 의문이 있다면 언제든지 포럼 이나 위키 에 물어보시고 또 이전 질답들도 확인하세요 .

Quick Reference ChartFor a PDF version of this chart, click here.

Page 12: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다
Page 13: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

프로그램 관리법 Managing your Applications기본적으로 CodeIgniter 는 여러분이 단일 프로그램을 만들거나 관리하고 있으며 ,그것은application/ 폴더에 있다고 가정하고 있습니다. 그러나 하나의 CodeIgniter 아래 여러 프로그램을 관리하거나, application 폴더명을 변경하거나 이동 해야할때도 있을것입니다.

Application 폴더 이름변경

application 폴더의 이름을 변경하실수 있습니다. 만약 변경하신다면 메인 index.php 파일을 여신후$application_folder 변수를 변경하셔야 합니다.:

$application_folder = "application";

Application 위치 이동

application 폴더의 위치를 system 폴더 아래가 아닌 다른곳으로 이동하실 수 있습니다.만약 이동하시면 메인 index.php 을 여신후 $application_folder 변수에 아래와 같이 전체 서버경로를 적어주세요:

$application_folder = "/Path/to/your/application";

하나의 CodeIgniter 로 여러 프로그램 관리(제작)하기

하나의 CodeIgniter 로 여러 프로그램을 관리하시려면 각프로그램을 application 폴더아래 하위폴더로 두십시오. 각프로그램은 현재 application 폴더가 가지고 있는것처럼 config, controllers ..등등의 하위폴더구조를 그대로 유지해야합니다.

예를 들어 "foo" 와 "bar" 이라는 두개의 프로그램을 관리한다고 하면. 폴더구조를 아래처럼하면 됩니다:

applications/foo/

applications/foo/config/

applications/foo/controllers/

applications/foo/errors/

applications/foo/libraries/

Page 14: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

applications/foo/models/

applications/foo/views/

applications/bar/

applications/bar/config/

applications/bar/controllers/

applications/bar/errors/

applications/bar/libraries/

applications/bar/models/

applications/bar/views/

특정 프로그램을 사용할때는 메인 index.php 파일을 연후$application_folder 변수에 그 경로를 입력합니다.

예를들어,"foo" 프로그램을 사용하시려면 아래와 같이 설정합니다:

$application_folder = "applications/foo";

Note:  각 프로그램 해당프로그램 고유의 index.php 파일이 필요합니다. 그 index.php 파일은 여러분이 원하시는 어떤 이름으로 하셔도 무방합니다.

보안 Security본 페이지에서는 웹 보안에 대한 실용적기법들(best practices) 과 CodeIgniter 의 보안 항목에 관한 상세 설명을 제공합니다.

URI 보안

CodeIgniter 는 악의있는 데이터가 프로그램으로 전달되는것을 방지하기 위하여 URI 에 쓰는 문자를 상당히 제한하기 있습니다.URL 은 아래 사항들만 포함해야 합니다:

Alpha-numeric text(알파벳과 숫자) Tilde: ~ Period: . Colon: :

Page 15: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Underscore(밑줄): _ Dash: -

Register_globals

시스템 초기화과정에서 모든 글로벌 변수(global variables)들은 해제( unset ) 됩니다 .단 , $_GET,$_POST 및 $_COOKIE 배열은 예외입니다.해제 루틴은 register_globals = off 와 동일한 동작을 합니다.

오류보고

실제 서비스에서는 PHP 의 에러표시기능을 꺼두는것이 좋습니다(internal error_reporting 플레그를 0 으로). 그렇게 하므로써 민감한 정보가 포함될 수있는 PHP 에러가 사용자에게 보이지 않도록 합니다.

index.php 에 포함된 CodeIgniter 상수 ENVIRONMENT 값을 ' production '으로 설정하면 오류메세지는 표시되지않습니다.개발 모드에서는 ' development '를 사용하는 것을 추천합니다 .환경별 처리 에서 환경별로 달리 처리할 수 있는 사항들을 확인하세요.

magic_quotes_runtime

magic_quotes_runtime 지시자는 시스템 초기화과정에서 off 되므로 데이터베이스에서 데이터를 조회할때 슬래쉬를 제거할 필요가 없습니다..

실용적 기법들 Best Practices서버로 부터 전달된데이터(사용자가 입력한 POST 데이터, COOKIE 데이터, URI 데이터, XML-RPC 데이터, SERVER 배열에 있는데이터 등)들을 처리하기전에 아래의 3 단계를 거치는것이 좋습니다. 

1. 오염된 데이터를 필터합니다

2. 올바른 타입,크기,길이 등의 사항들을 검증합니다. (이 단계가 1번단계를 대신할때도 있습니다.)

3. 데이터베이스에 입력하기 전에 이스케이프(Escape) 합니다.

CodeIgniter 는 이러한 단계를 지원하기 위하여 다음 함수들을 지원합니다:

XSS 필터링

CodeIgniter 는 크로스 사이트 스크립팅(Cross Site Scripting) 필터를 제공합니다. 이 필터는 악의적인 자바스크립트를 데이터에 포함하는것이라든지, 쿠키등을 가로채려는것을 찾아냅니다. XSS 필터는 여기 에 상세한 설명이 있습니다.

Page 16: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

데이터 검증

CodeIgniter 는 검증,필터링,데이터 준비를 위해서 폼검증 클래스 를 제공합니다.

데이터베이스 입력 전에 이스케이프(Escape)하기

이스케이프 없이 데이터 베이스에 입력하지 마시기 바랍니다. 더자세한 정보는 데이터베이스 의 쿼리 항목을 살펴보세요 .

View 에서 PHP문법을 CI 문법으로 대체 Alternate PHP Syntax for View FilesCodeIgniter 의 템플릿엔진 을 사용하지않는다면 ,아마 님하는 View 파일에서 순수 PHP 를 쓰실겁니다. 뷰 파일에서 PHP 코드를 최소화 하기위해서 루프등 코드 블록에서는 PHP 대체문법을 사용하시고 , echo 문의 경우에는 단축태그를 사용하시길 권장합니다. 여러분이 이런 문법에 익숙하지않았다면, 이 문법은 여러분의 코드에서 대괄호(brace)를 제거해주고 echo 문을 제거해줄것입니다.

자동화된 짧은 태그 지원 Automatic Short Tag Support

Note: 본페이지에서 설명하는 문법이 당신의 서버에서는 작동하지 않는다면, 아마 php.ini 파일에서 짧은태그(short tags) 가 비활성화(disabled)되어있기 때문일것입니다.CodeIgniter 는 만약 서버에서 지원하지않는다고해도 본페이지의 문법을 사용할 수 있도록 옵션을 제공합니다. 해당 옵션을 적용하면 짧은태그(short tags)를 즉석해서 다시 쓸것(rewrite)입니다. 이 옵션은 config/config.php 파일에서 설정 할 수 있습니다.

주의 : 만약 이 옵션을 사용하지 않으시면, 뷰(View)파일에서 PHP 에러가 발생했을때 , 에러메시지와 줄번호가 정확하게 표시되지 않을것입니다. 대신에 모든 에러는 eval() 에러처럼 표시될것입니다.

에코문 대체 Alternative Echos

일번적으로 에코문을 사용하여 변수를 출력하려면 아래와 같이 할것입니다:

<?php echo $variable; ?>

대체문법은 아래와 같습니다.:

<?=$variable?>

Page 17: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

대체 분기,루프 구조 Alternative Control Structures

if, for, foreach 및 while 과 같은 분기, 루프 구조 또한 단순한 구조로 사용될 수 있습니다.아래는 foreach 문의 예제입니다:

<ul>

<?php foreach($todo as $item): ?>

<li><?=$item?></li>

<?php endforeach; ?>

</ul>

보시는 바와 같이 대괄호가 없고 대신 괄호 닫는부분이 endforeach 로 변경되었습니다. 앞에 나열된 각종 분기,루프 구조는 유사한 구조를 가집니다.닫는괄호 부분은 endif, endfor, endforeach, endwhile 를 사용하시면 됩니다.

또한 각 구조 뒤에 세미콜론이 아닌 콜론을 사용한다는점을 주의하세요(끝부분 제외).

if 문을 사용하는 예제입니다.콜론에 주목해 주세요:

<?php if ($username == 'sally'): ?>

   <h3>Hi Sally</h3>

<?php elseif ($username == 'joe'): ?>

   <h3>Hi Joe</h3>

Page 18: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

<?php else: ?>

   <h3>Hi unknown user</h3>

<?php endif; ?>

CI 에서의 URL 규칙 CodeIgniter URLsCodeIgniter 에서 생성한 URL 은 깔끔하고 검색엔진에서 색인되기 좋은 구조입니다. 일반적인 쿼리스트링 기반의 URL 이 아니라 세그먼트 기반의 URL 을 사용합니다.

example.com/news/article/my_article

Note: 아래 기술된바와같이 쿼리스트링(Query string) URL 또한 사용할 수 있습니다(옵션).

URI 세그먼트

URL 세그먼트는 MVC패턴을 기반으로 아래와같이 표현됩니다. example.com/class/function/ID

1. 첫세그먼트는 호출될 컨트롤러 class 를 나타냅니다.2. 두번째 세그먼트는 클래스안의 호출될 function, 혹은 메쏘드를 나타냅니다.3. 세번째 이후는 컨트롤러로 전달될 어떤 변수라도 될수 있습니다.(예제에서는 ID)

URI 클래스 및 URL 헬퍼 의 함수들을 이용하시면 손쉽게 URI 데이터를 조작하실 수 있습니다.그리고, URL 은 URI Routing 을 이용하시면 좀더 유연하게 재 매핑 될수 있습니다.. 

index.php 파일 제거하기

기본적으로 index.php 파일은 URL 에 아래와같이 포함됩니다:

example.com/index.php/news/article/my_article

Page 19: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

.htaccess 파일을 규칙에 따라 사용하시면 쉽게 index.php 를 제거하실 수있습니다. 지정된것이 아니면 모두 리디렉션 하는 "negative" method(제한 메소드)를 아래와 같이 사용하세요:

RewriteEngine on

RewriteCond $1 !^(index\.php|images|robots\.txt)

RewriteRule ^(.*)$ /index.php/$1 [L]

위 예제의 설정을 통하여 index.php, images, robots.txt 를 제외한 HTTP 요청은 index.php 파일을 요청한 것으로 취급됩니다.

URL 에 확장자 추가하기

config/config.php 파일에서 URL 끝에 확장자를 추가하도록 설정할수 있습니다

만약 URL 이 아래와 같다면:

example.com/index.php/products/view/shoes

.html 등의 확장자를 추가하여 일반적인 웹페이지인것 처럼 보이게 할수있습니다.:

example.com/index.php/products/view/shoes.html

쿼리스트링(Query Strings) 사용하기

아래와같이 URL 에서 쿼리스트링을 사용하는게 필요한경우도 있을것입니다.:

index.php?c=products&m=view&id=345

application/config.php 파일에서 아래부분을 찾아보세요.

$config['enable_query_strings'] = FALSE;

$config['controller_trigger'] = 'c';

$config['function_trigger'] = 'm';

"enable_query_strings" 을 TRUE 로 바꾸면 됩니다. 이때 컨트롤러와 함수는 당신이 설정한 값에 따라서 호출할 수 있습니다(위의 경우 c 는 컨트롤러 호출 m 은 함수 호출):

index.php?c=controller&m=method

Page 20: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Please note: 쿼리스트링을 이용하시면 URL 헬퍼 ( form 헬퍼와 같이 URLs 을 생성하는 헬퍼들) 을 사용하실수 없습니다.

일반 함수들 Common FunctionsCodeIgniter 는 약간의 글로벌 함수를 지정해 두었으며, 여러분은 어떤곳에서도 그 함수들을 사용할 수 있습니다. 그 함수들은 별도의 라이브러리나 헬퍼의 로드과정이 필요없습니다.

is_really_writable('path/to/file')

is_writable() 함수는 윈도우 서버에서 해당파일이 읽기전용일때도 TRUE 를 반환합니다.그에 반해 본 함수는 실재로 파일을 작성해봐서 파일을 쓸수있는지를 확인합니다. OS 가 제공하는 쓰기가능 여부 정보를 신뢰할수 없을때만 사용하세요 .

if (is_really_writable('file.txt'))

{

    echo "I could write to this if I wanted to";

}

else

{

    echo "File is not writable";

}

config_item('item_key')

환경설정은 환경설정 라이브러리 를 사용하시는것이 좋습니다. 그러나 config_item() 함수를 이용해서도 단일 키를 가져올수 있습니다. 환경설정 라이브러리 페이지를 보시면 더 자세한 정보가 있습니다.

show_error('message'), show_404('page'), log_message('level', 'message')

이 함수들은 에러 핸들링 페이지를 참고하세요.

Page 21: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

set_status_header(code, 'text');

서버의 status header 를 직접 설정할때 씁니다. 예:

set_status_header(401);

// 헤더를: Unauthorized 로 설정합니다

요기에서 헤더에 사용할 수 있는 설정목록을 확인 하세요.

remove_invisible_characters($str)

ascii 문자 사이에 null문자가 들어가는것을 방지합니다.예:Java\0script.

html_escape($mixed)

htmlspecialchars() 함수의 단축버전입니다. 문자열이나 배열을 넘겨줄 수 있습니다. 크로스 사이트 스크립팅(XSS) 방어에 유용합니다.

캐싱 Web Page Caching성능의 극대화를 위해 CodeIgniter 는 여러분의 페이지를 캐싱할수 있도록 합니다..

비록 CodeIgniter 가 대단히 빠르긴 하지만, 페이지에 표시하고자하는 동적 정보들이 서버의 리소스,메모리,처리사이클등과 직접적으로 연관되어있기때문에 페이지 로드 속도에 영향을 미칩니다.

페이지를 캐싱하므로써 거의 정적 html 만큼 성능을 향상 시킬 수 있습니다.  

캐싱은 어떻게 작동하나요?

캐싱은 페이지 단위로 활성화 시킬수 있으며 , 캐시가 얼마동안 존재하고 리프레쉬 될지 설정할 수 있습니다.

페이지가 처음으로 로드되면 캐시파일은 application/cache 폴더에 작성됩니다. 이후에 같은 페이지가 요청되면 캐시파일이 브라우저로 전송됩니다. 캐시파일 존재시한이 지나면 캐시는 삭제되고 다시 작성될것입니다.

Note: 벤치마크 태그는 캐시 되지않으므로 캐시가 활성(enable)화 된 상태에서도 페이지 로드 속도를 보실수 있습니다.

Page 22: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

캐싱 활성화

캐시를 활성화 하려면 아래의 코드를 컨트롤러에서 원하는 위치에 삽입하세요.:

$this->output->cache(n);

n 은 캐시가 존재할 시간(리프레쉬 주기)을 분단위로 설정하는 값입니다.

위 테그는 어떤 함수 안에서도 쓸수있습니다. 순서에 상관이 없으므로 논리적으로 맞는 위치에 삽입하시면 됩니다. 위 태그가 삽입되면 여러분의 페이지는 캐싱 될것입니다..

Warning: 캐싱은 콘트롤러 와 뷰(view)를 같이 사용하여 페이지를 작성할 때만 작동합니다. Note: application/cache 폴더에 반드시 쓰기 권한이 있어야 합니다.

캐시 삭제

캐시가 더이상 필요없으면 캐시태그를 삭제하므로서 제거할수 있습니다. 캐시태그가 삭제되면 리프레쉬 주기가 돌아왔을때 기존 캐시를 삭제한후 다시 생성하지 않을것입니다.. Note: 캐시 태그를 삭제한다고 해서 캐시파일이 즉시 삭제되지는 않습니다. 즉시 삭제를 원하시면 캐시폴더에 있는 캐시파일을 직접 삭제하셔야 합니다.

후킹-프레임워크 코어확장 Hooks - Extending the Framework CoreCodeIgniter 의 후킹기능은 코어파일들을 해킹하지 않고도 내부작동방식을 변경할 수 있도록 합니다. CodeIgniter 가 작동하기 시작하면 동작개념도에 설명된 처리순서에 따라서 일을 처리합니다. 그러나, 당신은 특정한 순서에서 처리하는 방식을 새롭게 바꾸고 싶을수도 있습니다. 예를들어, 당신은 컨트롤러가 로드되기전에 특정한 기능이 수행되도록 하고싶거나, 혹은 특정순서중에 당신만의 기능이 수행되도록 하고싶을 수도 있습니다.

후킹 활성화 (Enabling Hooks)

후킹은 글로벌로 동작하며 application/config/config.php 파일에 있는 아래변수를 통해서 활성화 가능합니다.:

$config['enable_hooks'] = TRUE;

후크 정의 (Defining a Hook)

후크는 application/config/hooks.php 파일에 정의되어있습니다.각후크는 아래의 형태로 정의됩니다:

Page 23: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$hook['pre_controller'] = array(

                                'class'    => 'MyClass',

                                'function' => 'Myfunction',

                                'filename' => 'Myclass.php',

                                'filepath' => 'hooks',

                                'params'   => array('beer', 'wine', 'snacks')

                                );

주의:배열의 인덱스는 여러분이 사용하고자하는 후크포인트의 이름과 연관됩니다. 위 예제의경우에 후크포인트는 pre_controller 가 됩니다. 후크포인트의 목록은 아래에 있습니다. 다음 아이템들은 당신의 연관후크배열에 반드시 정의되어야 합니다.

클래스(class)  당신이 호출하고자 하는 클래스의 이름입니다.만약 클래스 대신 순차 함수(procedural function)를 사용한다면 이 항목을 공백으로 해주세요.

함수(function)  호출하고자 하는 함수의 이름입니다. 파일이름(filename)  당신의 스크립트(클래스, 함수)를 정의해둔 파일이름입니다. 파일경로(filepath)  파일경로(파일명을 제외한 디렉토리경로)입니다. 주의: 당신의 스크립트는

반드시 application 폴더 안에 있어야합니다. 파일경로는 그 폴더로부터의 상대경로로 설정됩니다.. 예를들어,당신의 스크립트가 application/hooks 에 있다면,파일경로는 hooks 가 됩니다. 당신의 스크립트가 application/hooks/utilities 에 있다면 파일경로는 hooks/utilities 가 되며 끝부분에 슬래시(/)가 붙지않습니다.

파라미터들(params)  스크립트로 전달하고자하는파라미터. 파라미터는 옵션입니다.

동일한 후크포인트에서 여러 후크 호출하기 Multiple Calls to the Same Hook

같은 후크포인트를 하나이상의 스크립트에서 사용하고싶다면 간단히 배열정의를 다차원으로 합니다.

예제:

$hook['pre_controller'][] = array(

                                'class'    => 'MyClass',

                                'function' => 'Myfunction',

Page 24: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                                'filename' => 'Myclass.php',

                                'filepath' => 'hooks',

                                'params'   => array('beer', 'wine', 'snacks')

                                );

$hook['pre_controller'][] = array(

                                'class'    => 'MyOtherClass',

                                'function' => 'MyOtherfunction',

                                'filename' => 'Myotherclass.php',

                                'filepath' => 'hooks',

                                'params'   => array('red', 'yellow', 'blue')

                                );

주의할것은 대괄호([])가 각 배열 인덱스뒤에 있다는점입니다.:

$hook['pre_controller'][]

이것을 이용하면 다양한 스크립트를 같은 후크포인트로 사용할 수 있습니다. 배열의 순서는 처리순서가 될것입니다.

후크포인트 Hook Points

다음은 가능한 후크포인트 목록입니다.. pre_system

시스템 작동초기입니다.벤치마크와 후킹클래스들만 로드된 상태로서, 라우팅을 비롯한 어떤 다른 프로세스도 진행되지않은 상태입니다.

pre_controller컨트롤러가 호출되기 직전입니다. 모든 기반클래스(base classes), 라우팅 그리고 보안점검이 완료된 상태입니다.

post_controller_constructor컨트롤러가 인스턴스화 된 직후입니다.즉 사용준비가 완료된 상태가 되겠죠. 하지만, 인스턴스화 된후 메소드들이 호출되기 직전입니다.

Page 25: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

post_controller컨트롤러가 완전히 수행된 직후입니다.

display_override_display() 함수를 재정의 합니다.최종적으로 브라우저에 페이지를 전송할때 사용됩니다.이로서 당신만의 표시 방법( display methodology)을사용할수 있습니다. 주의 : CI 부모객체(superobject)를 $this->CI =& get_instance() 로 호출하여 사용한 후에 최종데이터 작성은 $this->CI->output->get_output() 함수를 호출하여 할 수 있습니다.

cache_override출력클래스(output class) 에 있는_display_cache() 함수 대신 당신의 스크립트를 호출할 수 있도록 해줍니다.이로서 당신만의 캐시 표시 메커니즘(cache display mechanism)을 적용할 수 있습니다.

post_system최종 렌더링 페이지가 브라우저로 보내진후에 호출됩니다.

컨트롤러 Controllers컨트롤러는 여러분 프로그램의 핵심이라 할수 있습니다. 왜냐하면 Http 요청을 어떻게 처리할지 결정하기 때문입니다.  

컨트롤러란 무엇인가? Hello World 함수들

URI Segments 를 함수에 전달하기

기본 Controller 정의

함수요청을 재 매핑 하기

출력데이터 조절

Private 함수

컨트롤러들을 하위폴더로 구성하기

클래스 생성자

예약된 함수명

컨트롤러란 무엇인가?

간단하게 말하면 컨트롤러는 URL 과 상호작용하는 클래스 파일이라고 할수 있습니다.

아래 URI 를 보세요 :

example.com/index.php/blog/

Page 26: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위 예제에서 CodeIgniter 는 blog.php 라는 파일을 Controller 로서 찾은후 로드 합니다.

컨트롤러의 이름이 URI 의 첫번째 새그먼트와 동일하다면 해당 컨트롤러는 자동적으로 로드될것입니다.

따라해보세요:  Hello World!

실재로 작동되는걸 확인해보는것이 쵝오죠 ! blog.php 라는 파일을 만든후 다음의 코드를 입력하세요 .

그다음에 application/controllers/ 폴더에 저장하세요 .

자 이제 아래예 처럼 브라우저에서 접속보세요 .(example.com 부분은 여러분의 url 로 대체되어야합니다):

example.com/index.php/blog/

정상적으로 하셨다면 Hello World! 라는 텍스트가 화면에 표시되는걸 보실수 있을거예요.

Note: 클래스명은 반드시 대문자로 시작되어야합니다. 아래의 예제는 맞습니다.:

<?php

class Blog extends CI_Controller {

}

?>

그러나 아래의 예제는 틀렸습니다.

<?php

class blog extends CI_Controller {

<?phpclass Blog extends CI_Controller {

public function index(){

echo 'Hello World!';}

}?>

Page 27: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

}

?>

님하가 만드신 컨트롤러는 반드시 부모컨트롤러 로 부터 상속(extends)받아야합니다.그렇지않으면 컨트롤러의 기능을 사용할 수 없습니다.

함수 (Functions)

위 예제에서 함수이름은 index() 였습니다. "index" 함수는 URI 에서 두번째 새그먼트가 전달되지않을때 기본으로 실행됩니다. 아래와같은 방법으로도 위 예제와같이 "Hello World"를 화면에 뿌릴수 있습니다.

example.com/index.php/blog/index/

URI 의 두번째 새그먼트는 컨트롤러 내의 어떤함수가 실행될지를 결정합니다..

따라해보세요. 새로운 함수를 컨트롤러에 추가합니다.

아래 URL 로 접속하여 comment 함수를 실행시켜봅시다:

example.com/index.php/blog/comments/

새로운 메세지가 보이시죠 ? 짝짝짝

URI Segments 를 함수에 전달하기

URI 가 2 개보다 많은 세그먼트를 포함하고있다면 나머지들은 파라미터로 함수에 전달됩니다.

예를들어 다음의 URL 이라면:

<?phpclass Blog extends CI_Controller {

public function index(){

echo 'Hello World!';}public function comments(){

echo 'Look at this!';}

}?>

Page 28: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

example.com/index.php/products/shoes/sandals/123

함수는 새그먼트 3번과 4번("sandals" 및 "123")을 파라미터로 전달받게 됩니다.

<?php

class Products extends CI_Controller {

    public function shoes($sandals, $id)

    {

        echo $sandals;

        echo $id;

    }

}

?>

중요:  만약 URI 라우팅(Routing) 을 사용하고있다면, 함수에전달된 새그먼트는 재 라우팅된 새그먼트 일것입니다.

기본 Controller 정의

새그먼트 없이 사이트의 루트 url 만 요청될때 실행될 기본 컨트롤러를 지정할 수 있습니다.

기본 컨트롤러를 지정하려면 application/config/routes.php 파일의 아래 변수에 세팅합니다.

$route['default_controller'] = 'Blog';

위와 같이 Blog 를 기본 컨트롤러로 지정하면 루트 url 이 요청되었을때 이제는 Hello World를 보실수 있을것입니다.

함수요청을 재 매핑 하기

Page 29: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위에서 설명한것처럼, 일반적으로 URI 의 두번째 새그먼트는 컨트롤러내의 어떤 함수를 실행할것인가를 결정합니다. 이런 일반루틴을 재정의하여 원하는 액션으로 바꿀수 있습니다.그러려면_remap() 함수를 사용합니다.

public function _remap()

{

    // Some code here...

}

Important:  만약 컨트롤러가 _remap()함수를 포함하고이다면, URI 가 어떻든간에 _remap() 함수를 호출하게될것입니다.왜냐하면 _remap()은 CI 가 정의해 놓은 일반루틴 대신 여러분 자신만의 라우팅방법으로 재정의 해버리기 때문입니다.

재정의된 함수호출(일반적으로 URI 의 두번째 새그먼트)은 함수명이 _remap() 의 파라미터로 전달됩니다:

public function _remap($method)

{

    if ($method == 'some_method')

    {

        $this->$method();

    }

    else

    {

        $this->default_method();

    }

}

_remap() 메서드로 넘기는 메서드이름 외의 파라미터는 모두 옵션입니다. 이 배열은 PHP의 call_user_func_array 와 결합하여, CodeIgniter 의 기본동작처럼 작동합니다.

Page 30: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

public function _remap($method, $params = array())

{

    $method = 'process_'.$method;

    if (method_exists($this, $method))

    {

        return call_user_func_array(array($this, $method), $params);

    }

    show_404();

}

출력데이터 조절(Processing Output)

CodeIgniter 는 최종적으로 렌더링되어 자동적으로 브라우저에 데이터를 전송해주는 출력클래스를 가지고있습니다. 뷰항목 과 출력클래스 페이지에서 보다 자세한 정보를 보실수 있습니다. 그러나 어떤경우에는 최종적으로 데이터가 브라우저로 보내지기전에 뭔가 전처리를 해야할때도 있을것입니다. 그것은 컨트롤러에 _output() 함수를 추가하는 것으로 가능합니다.

Important:  컨트롤러가_output()라는 함수를 가지고있다면 최종데이터를 바로 전송하는것 대신 그함수가 실행될것입니다.함수의 첫번째 파라미터는 최종출력데이터를 가지고있습니다.

예제:

public function _output($output)

{

    echo $output;

}

중요 : _output() 는 최종데이터를 받습니다. 최종데이터가 _output()에 전달되기전에 벤치마크 및 메모리사용 데이터는 렌더링될것이고,캐시작성이 활성 상태라면 캐시파일도 작성되며, feature 항목을 사용한다면 헤더정보도 보내질것입니다. 컨트롤러가 출력캐시를 정상적으로 보내게 하려면, _output() 메서드를 아래와 같이

Page 31: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

사용하세요:if ($this->output->cache_expiration > 0)

{

    $this->output->_write_cache($output);

}

그런데 이 함수를 사용한다면 페이지 실행시간 및 메모리사용상태정보는 정확하지 않을수 있습니다.왜냐하면 그러한 정보들은 당신이 _output() 에서 처리할 내용이 어떤것인지 계산에 넣고 있지 않기 때문입니다. 출력을 조절하는 다른방법은출력클래스 항목에서 찾아보세요.

Private 함수

때에따라서 함수의 공개적 접근을 허용해서는안될경우도 있을것입니다. 함수를 private 으로 만들려면, 간단히 밑줄(_)을 함수이름앞에 추가해주세요.그러면 웹에서 호출할 수 없게 됩니다.

예제:

private function _utility()

{

  // some code

}

아래와 같이 접근하려해도 작동하지않을것입니다:

example.com/index.php/blog/_utility/

컨트롤러들을 하위폴더로 구성하기

대형 사이트를 만든다면 아마도 컨트롤러를 하위폴더로 구성하는것이 더 나을것입니다.

application/controllers 아래에 폴더를 만든다음 컨트롤러 클래스들을 그안에 넣으세요.

Note:  이런식으로 사용하는경우에 URI 첫번째 새그먼트는 반드시 폴더명이라야합니다.

예를들어, 여러분의 컨트롤러 위치가 아래와같다면:

Page 32: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

application/controllers/products/shoes.php

위의 컨트롤러를 호출하기위해서는 아래와같은 URI 를 사용해야합니다:

example.com/index.php/products/shoes/show/123

각각의 하위폴더는 URL 에서 하위폴더만을 호출할때를 대비하여 기본 컨트롤러를 가지고 있어야 할것입니다. 간단히 기본컨트롤러를 application/config/routes.php 파일에 설정하시면 됩니다.

또한 CodeIgniter 는 URI 를 URI 라우팅( Routing) 기능을 이용하여 재 매핑할 수 있도록 지원하고있습니다.

클래스 생성자

컨트롤러에서 생성자를 사용하고자 한다면 생성자아래 반드시 아래의 코드가 들어있어야합니다.:

parent::__construct();

그렇지않으면 여러분이 만든 생성자가 부모 controller 의 생성자를 재정의 해버리기때문입니다.

그러므로 반드시 위와같이 부모 controller 를 수동으로 호출해 주어야합니다.  

<?php

class Blog extends CI_Controller {

       public function __construct()

       {

            parent::__construct();

            // 생성자 코드에 기능추가

       }

Page 33: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

}

?>

생성자는 클래스가 초기화될때 어떤 기본값들을 설정해야한다거나 어떤 프로세스를 수행해야할때 유용합니다.생성자는 리턴값이 있어서는 안됩니다.

예약된 함수명

예약어 페이지를 참고해주세요

 

나만의 코어 클래스 만들기 Creating Core System ClassesCodeIgniter 를 사용할때마다 자동으로 초기화되어 코어프레임워크의 일부로 작동하는 몇몇 기반클래스(base classes)가 있습니다. 그것도 좋습니다만, 코어클래스를 여러분의 클래스로 대체하거나 확장 하는것도 가능합니다.  

대부분 사용자들은 이런것까지 필요없겠지만, 깊이있게 CodeIgniter 의 코어부분을 튜닝하고싶어하는분들을 위해 이러한 옵션을 제공합니다.

Note: 코어클래스에대해 작업하는것은 여러가지 위험을 내포하고있으므로, 매우 신중하셔야 합니다.

시스템 클래스 목록

다음의 시스템클래스 목록은 CodeIgniter 가 작동할때마다 호출되는 클래스 들입니다.: Benchmark Config Controller Exceptions Hooks Input Language Loader

Page 34: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Log Output Router URI Utf8

코어클래스 대체 Replacing Core Classes

내장된 코어클래스 대신에 당신이 만든 시스템 클래스를 사용하려면 클래스 파일을 application/core 폴더에 저장하세요:

application/core/some-class.php

이 폴더가 없다면 만드시면 됩니다..

당신의 클래스 이름이 상단의 클래스 목록중 어느하나와 일치한다면 당신의 클래스가 그것 대신 사용될 것입니다..

당신의 클래스선언은 는 반드시 CI 접두어로 시작해야합니다.. 예를 들어 ,당신이 만든 파일 이름이 Input.php 이라면 클래스는 다음과 같이 선언해야합니다.:

class CI_Input {

}

코어클래스 확장

내장 코어 클래스에 몇몇 함수추가 정도를 원하신다면 내장클래스를 확장하는것이 현명합니다..클래스 확장 작업은 대체작업과 거의 유사합니다.

클래스는 반드시 내장클래스를 확장(extend)하여 만드셔야 합니다.. 당신이 만드는 클래스는 반드시 접두어 MY_ 로 시작해야합니다.(이 접두어는 설정에서 바꿀 수

있습니다).

예를들어 , 내장 Input 클래스를 확장하고자 한다면 application/core/MY_Input.php,파일을 만들고 ,다음과같이 클래스를 선언합니다.:

Page 35: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

class MY_Input extends CI_Input {

}

Note:만약 생성자를 사용해야한다면 클래스 생성자에서 부모클래스의 생성자를 호출해주어야한다는점을 잊지마세요 :

class MY_Input extends CI_Input {

    function __construct()

    {

        parent::__construct();

    }

}

Tip:  당신이 만든클래스내의 함주중에서 부모클래스(여기서는 내장클래스)의 이름과 같은 함수는 부모클래스의 함수 대신 사용됩니다.(메소드 오버라이딩과 같습니다). 이러한 특징으로 부분적인 내장 클래스 함수의 변경이 가능한것입니다..

만약 컨트롤러 코어클래스(Controller core class)를 확장한다면, 컨트롤러 기반클래스를사용하는 당신의 프로그램에서 그부분을 확장된 기반클래스 이름으로 바꾸셔야합니다..

class Welcome extends MY_Controller {

    function __construct()

    {

        parent::__construct();

    }

Page 36: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    function index()

    {

        $this->load->view('welcome_message');

    }

}

나만의 클래스에서 쓰는 접두어 바꾸기(Setting Your Own Prefix)

접두어를 원하는대로 바꾸려면 application/config/config.php 파일을 여신후 아래의 변수를 찾습니다.:

$config['subclass_prefix'] = 'MY_';

모든 CodeIgniter 내장클래스는 접두어로 CI_ 을 사용하고 있으므로 여러분의 접두어에는 사용하시면 안됩니다.

드라이버 생성

드라이버의 디렉토리 및 파일 구조

샘플 드라이버의 디렉토리및 파일 구조 레이아웃: /application/libraries/Driver_name o Driver_name.phpo drivers Driver_name_subclass_1.php Driver_name_subclass_2.php Driver_name_subclass_3.php

주의: Driver_name 에 ucfirst()를 적용하여 , 대소문자를 구분하는 시스템에서도 문제 없도록 하세요.

뷰Views간단히 말하면 뷰 는 웹페이지이거나 헤더 푸터같은 웹페이지 조각입니다. 사실,뷰는 유연하게 다른 뷰에 삽입될수 있습니다.

Page 37: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

뷰는 절대로 직접 호출되지않고 ,컨트롤러를 통해서 호출됩니다. MVC 패턴에서 컨트롤러는 교통경찰같은 역할을 하며 어떤 뷰가 보여져야할지를 결정하는 책임 있다는것을 명심하세요 .만약 컨트롤러 페이지를 아직 읽지않으셨으면 반드시 먼저 읽어주세요 .

컨트롤러 페이지에서 작성한 컨트롤러에 뷰를 추가해봅시다.

뷰 만들기

blogview.php 라는 파일을 만든후 아래의 코드를 입력하세요.:

그리고 application/views/ 폴더안에 저장하세요.

뷰 로딩하기

특정 뷰 파일을 로드하기위해서 아래와 같은 코드를 사용합니다:

$this->load->view('name');

name 은 뷰 파일의 이름을 넣어주시면 됩니다. Note: .php 확장자는 넣지 마세요.

이전에 만들었던 blog.php 컨트롤러를 여신후 echo 문장대신 View 를 로드하도록 합니다:

아래처럼 url 로 접속해 보면 echo 문으로 찍은 글 대신 새로 작성한 뷰를 보실수 있습니다:

example.com/index.php/blog/

여러개의 뷰를 로드하기

<html><head><title>My Blog</title></head><body>

<h1>Welcome to my Blog!</h1></body></html>

<?phpclass Blog extends CI_Controller {

function index(){

$this->load->view('blogview');}

}?>

Page 38: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CodeIgniter 는 컨트롤러에서 뷰를 로드($this->load->view)할때 지능적으로 동작합니다 from within a controller. 만약 2 개이상을 로드하면 하나씩 덧붙여서(append) 출력합니다.예를들어 header view, a menu view, a content view, and a footer view 를 출력하고싶다면 아래와 같이 로드하시면 됩니다:

<?php

class Page extends CI_Controller {

   function index()

   {

      $data['page_title'] = 'Your title';

      $this->load->view('header');

      $this->load->view('menu');

      $this->load->view('content', $data);

      $this->load->view('footer');

   }

}

?>

위 예제같은 경우 우리는 아래에 소개하는 동적데이터추가 라는 방법을 쓸것입니다..

뷰를 하위폴더에 저장하기

뷰는 서브폴더에 저장될수 있습니다..이럴경우 뷰를 로드할때 폴더이름을 같이 적어주시면됩니다.

예제:

Page 39: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->view('folder_name/file_name');

뷰에 동적으로 데이터 추가하기

뷰를 로드할때 배열이나 객체를 두번째 파라미터로 전달할 수 있습니다.

배열을 사용하는 예제:

$data = array(

               'title' => 'My Title',

               'heading' => 'My Heading',

               'message' => 'My Message'

          );

$this->load->view('blogview', $data);

객체를 사용하는 예제:

$data = new Someclass();

$this->load->view('blogview', $data);

Note: 객체를 사용할때는 클래스의 변수가 배열의 요소로 변환됩니다.

위에서만든 컨트롤러를 이용하여 한번 해봅시다:

뷰 파일을 열어서 텍스트를 넘겨준 배열의 key 이름과 같은 변수로 바꾸어봅시다.:

<?phpclass Blog extends CI_Controller {

function index(){

$data['title'] = "My Real Title";$data['heading'] = "My Real Heading"$this->load->view('blogview', $data);

}}?>

Page 40: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

그리고 URL 로 접속해보면 변수값으로 바뀌어있는것을 확인할 수 있습니다.

루프작성

뷰에 넘겨주는 데이터는 단순한 변수로 제한되어있지 않습니다. 배열안의 값으로 다른 배열을 넣어서 전달할수 있으며, 넘겨받은 배열을가지고 루프를 이용하여 여러줄의 데이터를 표시할수 있습니다. 예를 들어 데이터베이스에서 데이터를 가져온다면 일반적으로 그 값을 다차원배열에 넣어 뷰로 전달하게 됩니다.

다음 예제를 여러분의 컨트롤러에 추가하세요:

그다음 뷰파일을 열어 루프를 작성합니다:

<html><head><title><?php echo $title;?></title></head><body>

<h1><?php echo $heading;?></h1></body></html>

<?phpclass Blog extends CI_Controller {

function index(){

$data['todo_list'] = array('Clean Hous$data['title'] = "My Real Title";$data['heading'] = "My Real Heading"$this->load->view('blogview', $data);

}}?>

Page 41: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Note: 위 예에서 우리가 PHP 대체문법을 이용하고 있다는걸 알수 있을것입니다. 이에대해 더 자세한 정보는여기 를 참조해주세요 .

뷰를 데이터처럼 리턴받기(Returning views as data)

세번째 파라미터(옵션) 를 사용하면 뷰를 브라우저로 전송하는대신 데이터로써 리턴하게됩니다. 뷰를 데이터로 처리해야할경우 유용하겠죠 . 아래와같이 3번째 파라미터를 true (boolean)로 설정하면 됩니다.기본값은 false 이며 이때 는 데이터를 브라우저로 전송하게 됩니다. 데이터로 리턴받을때는 변수에 할당해야한다는걸 잊지마세요 .:

$string = $this->load->view('myfile', '', true);

모델Models모델은 전통적인 MVC 패턴을 구현하고자하는사람들이 선택적으로 사용할 수 있습니다.

모델이란 무엇인가? 모델해부

모델 로드하기

모델 자동로드

데이터베이스 연결

What is a Model?

<html><head><title><?php echo $title;?></title></head><body><h1><?php echo $heading;?></h1><h3>My Todo List</h3><ul><?php foreach($todo_list as $item):?><li><?php echo $item;?></li><?php endforeach;?></ul></body></html>

Page 42: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

모델은 데이터베이스와 연동하여 사용하기위한 PHP 클래스입니다. 예를들이, CodeIgniter 를 이용하여 블로그를 관리한다고합시다. 아마 삽입,조회,수정 등의 기능을 가진 모델클래스가 필요할것입니다.

모델클래스의 형태 예제:

class Blogmodel extends CI_Model {

    var $title   = '';

    var $content = '';

    var $date    = '';

    function __construct()

    {

        // Call the Model constructor

        parent::__construct();

    }

    

    function get_last_ten_entries()

    {

        $query = $this->db->get('entries', 10);

        return $query->result();

    }

    function insert_entry()

    {

Page 43: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

        $this->title   = $_POST['title']; // please read the below note

        $this->content = $_POST['content'];

        $this->date    = time();

        $this->db->insert('entries', $this);

    }

    function update_entry()

    {

        $this->title   = $_POST['title'];

        $this->content = $_POST['content'];

        $this->date    = time();

        $this->db->update('entries', $this, array('id' => $_POST['id']));

    }

}

Note: 위의 함수들은 액티브레코드(Active Record) 를 이용하여 데이터베이스를 이용하는 방법을 보여줍니다

Note: 이예제에서는 단순화하기위하여 $_POST 를 바로 사용하였습니다. 일반적으로는 나쁜예죠. 일반적인 접근법은 Input 클래스 를 다음과 같이 사용하는것 입니다 .$this->input->post('title')

모델의 해부

Page 44: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

모델클래스는 application/models/ 폴더에 저장됩니다. 서브폴더에 저장하셔도 됩니다.

모델클래스의 기본 프로토 타입예:

class Model_name extends CI_Model {

    function __construct()

    {

        parent::__construct();

    }

}

Model_name 은 여러분의 클래스 이름으로 바꾸세요. 클래스이름의 첫글자는 반드시 대문자로 시작해야하며 나머지 글자들은 소문자라야 합니다. 여러분의 클래스는 반드시 Model 클래스에서 상속(extends)받아야 합니다.

파일명은 클래스명과 같아야하나 모두 소문자여야 합니다.

예를들어 클래스가 아래와같다면:

class User_model extends CI_Model {

    function __construct()

    {

        parent::__construct();

    }

}

파일명은 아래와 같아야합니다:

application/models/user_model.php

모델 로드하기

Page 45: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

모델은 일반적으로 컨트롤러 내에서 로드되어 호출됩니다. 모델은 아래와 같은 방법으로 로드합니다:

$this->load->model('Model_name');

모델이 하위폴더에 있다면 상대경로로 모델폴더를 적어줍니다.예를 들어 모델이 application/models/blog/queries.php 경로에 위치해있다면 아래와같이 로드할수 있습니다:

$this->load->model('blog/queries');

모델이 로드되면 모델클래스의 이름과 같은 객체로 모델내의 함수를 사용할수 있습니다.

예제:

$this->load->model('Model_name');

$this->Model_name->function();

모델을 다른객체이름으로 할당하여 사용하고싶다면 두번째 파라미터에 사용하고싶은 이름을 넘겨서 로드하시면됩니다예:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

아래는 모델을 로드하여 그 데이터를 뷰에 넘겨주는 예제입니다:

class Blog_controller extends CI_Controller {

    function blog()

    {

        $this->load->model('Blog');

Page 46: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

        $data['query'] = $this->Blog->get_last_ten_entries();

        $this->load->view('blog', $data);

    }

}

모델 자동로드

프로그램 전체에 걸쳐 글로벌로 모델을 로드해야할경우라면 자동로드 설정을 통해 자동으로 로드하도록 할수 있습니다. application/config/autoload.php 파일을 열어서 autoload 배열에 원하는 모델을 추가하세요.

데이터베이스 연결

모델이 로드되었을때 그 모델이 자동으로 데이터베이스에 연결하지는 않습니다.다음의 옵션을 사용하여 연결하세요.

표준 데이터베이스 메소드(상세설명)를 이용하여 컨트롤러나 모델에서 데이터베이스에 연결할수 있습니다.

모델을 로드할때 세번째 파라미터를 TRUE (boolean)로 설정하여 자동연결할 수 있습니다. 이때 database config 파일에 설정된 정보가 사용될것입니다: $this->load-

>model('Model_name', '', TRUE);

세번째 파라미터로 데이터베이스 연결정보를 넘겨주어서 연결할 수도 있습니다:$config['hostname'] = "localhost";

$config['username'] = "myusername";

$config['password'] = "mypassword";

$config['database'] = "mydatabase";

$config['dbdriver'] = "mysql";

$config['dbprefix'] = "";

$config['pconnect'] = FALSE;

Page 47: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$config['db_debug'] = TRUE;

$this->load->model('Model_name', '', $config);

여러환경 처리

개발자는 응용 프로그램 개발 환경 또는 프로덕션 환경에 따라 시스템이 다르게 동작하기를 원합니다. 예를 들어, 자세한 오류 출력은 개발중일때는 유용하지만, 실제 서비스에서는 보안 문제를 일으킬 수 있습니다.

환경설정 상수

기본적으로 CodeIgniter 는 ENVIRONMENT 상수가 ' development '로 설정되어 있습니다. index.php 맨 위에 다음과 같이 지정되어 있습니다:

define('ENVIRONMENT', 'development');

프레임 워크의 기본동작에 미치는 영향(아래섹션보시오) 이외에, 개발환경별 동작방식을 바꾸기위해 이 상수를 사용할 수 있습니다.

프레임 워크의 기본동작에 미치는 영향

CodeIgniter 시스템의 여러 장소에서 ENVIRONMENT 상수가 사용됩니다. 이 섹션에서는 기본 프레임 워크의 동작이 어떻게 영향을 받는지 설명합니다.

오류보고

ENVIRONMENT 상수를 ' 'development' '로 설정하면 모든 PHP 오류가 발생할 때 브라우저에 표시됩니다. 반대로 ' production '으로 설정하면 오류를 표시하지 않습니다 . 프로덕션 환경에서 오류를 표시하지 않는것은 좋은 보안 관례 입니다. 

설정 파일

필요하다면, CodeIgniter 가 특정 환경설정파일을 로드하도록 할 수 있습니다. 이것은 환경에 따라 다른 API 키를 사용 같은 경우 유용합니다. 자세한 내용은 설정 클래스 의 여러 환경 섹션에 설명되어 있습니다.

CI 라이브러리 사용하기 Using CodeIgniter Libraries

Page 48: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

모든 라이브러리는 system/libraries 폴더에 있습니다. 대부분의 경우 ,라이브러리를사용하려면 컨트롤러 의 생성자에서 아래와같이 초기화해야합니다.:

$this->load->library('class name');

class name 은 호출하고싶은 클래스의 이름입니다.

예를 들면,Form validation 클래스를 로드하려면 아래와같이 합니다:

$this->load->library('form_validation');

한번 초기화하면 사용자가이드에서 해당 클래스의 사용법을 참고하여 사용하시면됩니다.

한번에 여러 라이브러리를 로드하려면, 배열을 파라미터로 넘기면 됩니다.

$this->load->library(array('email', 'table'));

나만의 라이브러리 만들기

나만의 라이브러리 만들기 섹션을 참고하세요.

CLI 에서 실행

브라우저의 url 을 통해서 Controllers 를 호출할 수 있는것과 마찬가지로 명령줄 the command-line interface (CLI)에서도 호출 할 수있습니다.

CLI란? 왜 명령줄에서 실행하는가? 어떻게 작동하지?

CLI란?

command-line interface 는 명령줄에서 프로그램을 실행하는것임(다들 아실듯). 더 궁금하시다면 위키페이지를 보삼 -> Wikipedia article.

왜 명령줄에서 실행하는가?

명령줄에서 CodeIgniter 를 실행하는 이유는 여러가지가 있지만 명확한 이유가 없는 경우도 있겠습니다요.

wget 이나 curl 을 사용하지 않아도 cron-job 을 실행할 수 있습니다.

Page 49: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->input->is_cli_request()를 검사하여, URL 을 통해서는 cron-job 을 실행하지 못하도록 할 수 있습니다.

권한 설정, 캐시 폴더의 파일 삭제, 백업 등의 "작업"을 대화 형식으로 실행할 수 있습니다.. 다른 언어로 만들어진 다른 프로그램과 통합할 수 있습니다.예를들어, 임의의 C++ 를 CI

어플리케이션의 모델에서 호출할 수 있습니다!

해 봅시다:  Hello World!

실제 동작을 확인하기 위해 간단한 컨트롤러를 작성합시다. 텍스트 편집기에서 tools.php 를 만들고 다음 코드를 입력하십시오:

그런 다음이 파일을 application/controllers/ 폴더에 저장합니다.

일반적으로 다음의 URL 에 액세스하여 사이트를 볼 수 있습니다.:

example.com/index.php/tools/message/to

CodeIgniter 프로젝트를 조작하기 위해 Mac / Linux 에서는 터미널을 열고 Windows 에서는 "cmd"를 실행합니다.$ cd /path/to/project;$ php index.php tools message

제대로 했다면 Hello World!를 보실 수 있습니다.$ php index.php tools message "John Smith"

URL 인수와 마찬가지로 인수를 전달할 수 있습니다. "John Smith"를 인수로 전달하여 다음과 같이 표시됩니다. : Hello John Smith!.

이것이 전부입니다!

위에것만 알면 명령줄에서 controller 를 사용하는데 문제가 없습니다. 라우팅이나_remap 도 문제 없이 동작합니다.

헬퍼 Helper Functions

<?phpclass Tools extends CI_Controller {

public function message($to = 'World'){

echo "Hello {$to}!".PHP_EOL;}

}?>

Page 50: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

헬퍼는 여러분의 일에 뭔가를 제안하고 도와주는 존재입니다. 각각의 헬퍼파일은 특정 영역에 해당하는 함수들의 모음입니다.예를 들어 URL 헬퍼 의 경우 링크생성을 도와주며,Form 헬퍼는 폼의요소를 만드는데 도움이 되고, Text 헬퍼는 다양한 텍스트 처리(formatting)을 도와주며, Cookie 헬퍼는 쿠키를 읽고 쓰는데, File 헬퍼는 파일을 조작하는데 도움이 될것입니다.

CodeIgniter 의 다른 시스템과는 다르게 ,헬퍼는 객체지향적인 형태로 작성되지않았습니다.헬퍼의 함수들은 간단하고 ,절차적입니다. 각 헬퍼 함수들은 특정한 한가지 일만하며 ,다른 헬퍼함수에 의존하지않습니다.

CodeIgniter 는 헬퍼를 자동으로 로드하지않으므로 ,사용을 위해서는 먼저 해당 헬퍼를 로드해야합니다. 한번로드되면 여러분의컨트롤러 및 뷰 에서 글로벌 하게 사용할 수 있습니다. .

헬퍼는 통상 system/helpers 폴더나 application/helpers 폴더에 위치합니다. CodeIgniter 는 application/helpers 폴더를 먼저 살펴볼것입니다. 해당디렉토리가 없거나, 해당디렉토리에 찾는 헬퍼가 없다면 CI 는 글로벌 헬퍼가 저장되어있는 system/helpers 폴더를 살펴볼것입니다.

헬퍼 로드하기

헬퍼를 로드하는것은 다음예제처럼 매우 간단합니다:

$this->load->helper('name');

name 은 헬퍼파일 이름을 가리키며 .php 확장자 및 _helper 는 붙이지 않습니다.

예를 들어 URL 헬퍼 를 로드할경우, url_helper.php 라는 파일이므로 다음과 같이로드합니다:

$this->load->helper('url');

헬퍼는 사용하기전에 반드시 먼저 로드해야하며 컨트롤러의 어느함수안에서 로드해도 상관없습니다. 심지어 뷰파일 안에서도 로드할수있습니다만 권장하지않습니다. 헬퍼를 컨트롤러의 생성자에서 로드해두면 컨트롤러 내부의 어떤 함수에서도 바로 사용할 수 있습니다.그렇지않으면 헬퍼가 필요한 해당 함수에서 로드하여 사용하셔도 됩니다..

Note: 헬퍼를 로드하는 것은 리턴값이 없으므로 리턴값을 저장하기위하여 변수에 할당하지 마시기 바랍니다.그저 위의 예시처럼 사용하시면 됩니다..

여러개의 헬퍼 로드하기

여러개의 헬퍼를 로드해야할경우 ,아래와같이 배열을 이용할 수 있습니다:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

Page 51: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

헬퍼 자동 로드

헬퍼가 프로그램 전반에 광범위하게 쓰여야한다면 자동로드 설정으로 시스템 초기화 과정에서 자동으로 로드할 수 있습니다.application/config/autoload.php 파일을 연다음 autoload 배열에 해당 헬퍼를 추가해주세요.

헬퍼사용하기

헬퍼는 일단 한번 로드 되면 ,표준 PHP 함수를 사용하듯 사용하면 됩니다..

예를 들어 anchor() 함수를 이용하여 링크(< a 태그)를 생성한다면 View 파일에서 다음과같이 사용할 수 있습니다.:

<?php echo anchor('blog/comments', 'Click Here');?>

"Click Here" 은 이름( <a 태그 안에 name 속성)이 되고 "blog/comments" 는 연결하고자하는 url 이 됩니다.이 URL 은 통상 controller/function 형태를 가지게 되겠죠.

헬퍼의 확장

헬퍼를 확장하려면 application/helpers/ 폴더아래 기존 헬퍼와 겹치지않는 이름의 파일을 만듦니다.이 때 이름의 접두어는 MY_ 가 되어야합니다.(이부분은 설정이 가능합니다. 아래를 보세요).

기존헬퍼에 두어개의 함수를 추가할경우 헬퍼를 새로 작성하는것은 낭비입니다. 이런경우 기존의 헬퍼를 상속(extends)하는것이 현명합니다.상속(extend)라는 말은 대략적으로 사용하겠습니다. 왜냐하면 헬퍼함수는 절차적이며따로따로 작용하기 때문입니다. 헬퍼는 전통적인 프로그램 기법과는 다르게 상속(extends) 됩니다. 이방법을 통해서 기존의 헬퍼에 기능을 추가하거나 기존기능을 수정할 수 있게됩니다.

예를들어 내장된 Array Helper 를 사용할경우 application/helpers/MY_array_helper.php 파일을 생성하고 함수를 추가하거나 재정의합니다.:

// any_in_array() is not in the Array Helper, so it defines a new function

function any_in_array($needle, $haystack)

{

    $needle = (is_array($needle)) ? $needle : array($needle);

    foreach ($needle as $item)

Page 52: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    {

        if (in_array($item, $haystack))

        {

            return TRUE;

        }

        }

    return FALSE;

}

// random_element() is included in Array Helper, so it overrides the native function

function random_element($array)

{

    shuffle($array);

    return array_pop($array);

}

나만의 접두어 설정하기

파일명의 접두어는 헬퍼에도 쓰이지만,라이브러리 및 코어클래스를 확장할때에도 쓰입니다. 나만의 접두어를 설정하려면 application/config/config.php 에서 아래의 아이템을 찾은후 설정하시면됩니다.

$config['subclass_prefix'] = 'MY_';

모든 CodeIgniter 내장 라이브러리의 접두어는 CI_ 이므로 나만의 접두어로 사용할수 없습니다.

이제 뭐하지?

Page 53: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

목차페이지에서 다양한 헬퍼를 만나실수 있습니다.

Creating Ancillary ClassesIn some cases you may want to develop classes that exist apart from your controllers but have the ability to utilize all of CodeIgniter's resources. This is easily possible as you'll see.

get_instance()

Any class that you instantiate within your controller functions can access CodeIgniter's native resources simply by using the get_instance() function. This function returns the main CodeIgniter object.Normally, to call any of the available CodeIgniter functions requires you to use the $this construct:

$this->load->helper('url');

$this->load->library('session');

$this->config->item('base_url');

etc.

$this, however, only works within your controllers, your models, or your views. If you would like to use CodeIgniter's classes from within your own custom classes you can do so as follows:First, assign the CodeIgniter object to a variable:

$CI =& get_instance();

Once you've assigned the object to a variable, you'll use that variable instead of $this:

$CI =& get_instance();

$CI->load->helper('url');

$CI->load->library('session');

Page 54: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$CI->config->item('base_url');

etc.

Note: You'll notice that the above get_instance() function is being passed by reference:

$CI =& get_instance();

This is very important. Assigning by reference allows you to use the original CodeIgniter object rather than creating a copy of it.

CodeIgniter 드라이버 사용하기

드라이버는 특별한 형태의 라이브러리이며, 하나의 부모클래스를 가지고, 여러개의 자식클래스들을 가질 수 있습니다.자식 클래스는 부모클래스에 접근할 수 있으나, 같은 수준의 클래스(siblings)에는 접근할 수 없습니다.

드라이버는 컨트롤러에서 라이브러리 호출할때 우아한 문법 사용할 수 있는 혜택을 제공하며, 별도의 클래스로 분리할 것을 요구합니다. (드라이버에 들어가야할 코드를 컨트롤러에 두지말고 별도의 드라이버 클래스를 만들어 사용하므로써, 컨트롤러의 코드가 간소화 되어 우아한 문법을 사용할 수 있다는 의미인듯합니다)

드라이버는 system/libraries 폴더 안에 있으며, 각 드라이버의 폴더명은 부모클래스의 이름과 동일합니다. 폴더 안에는 drivers 라는 하위 폴더를두고 모든 자식 클래스 파일을 그 안에 넣습니다.

드라이버를 사용하기 위해서는 다음의 초기화 메서드를 사용하여 컨트롤러에서 초기화합니다:

$this->load->driver('class name');

여기서 class namee 은 호출하려는 드라이버 클래스의 이름입니다. 예를 들어, "Some Parent"라는 드라이버를로드하려면 다음과 같이합니다:

$this->load->driver('some_parent');

해당 클래스의 메서드는 다음과 같이 호출합니다:

$this->some_parent->some_method();

자식클래스를 초기화 하지않고 ,부모클래스에서 직접 호출할 수 있습니다:

$this->some_parent->child_one->some_method();

$this->some_parent->child_two->another_method();

Page 55: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

직접 드라이버 만들기

드라이버 만들기섹션을 참고 해 주세요.

나만의 라이브러리 만들기 Creating Libraries우리가 라이브러리(Libraries)라고 말할때는 일반적으로 libraries 폴더안에 위치하며 본 사용자 가이드에 설명되어있는 그것을 뜻합니다.하지만 여기서는 그 라이브러리가 아니라 님하가 어떻게 application/libraries 저장될 님하만의 라이브러리를 만들지를 설명합니다. 또한 그 라이브러리를 글로벌 라이버러리와 어떻게 분리하여 관리하는지도 설명합니다.

보너스로 CodeIgniter 는 기존의 라이브러리를 확장하여 ( extend) 님하만의 라이브러리를 만들수 있도록 지원합니다.아니면 이미 내장된 라이브러리를 application/libraries 에 저장된 동일한 버전 및 이름의 님하가 만든라이브러리도 대체할수도 있습니다.

요약하자면:

남하는 완전히 새로운 라이브러리를 만들 수 있습니다.. 내장된 라이브러리를 확장하여 여러분만의 라이브러리를 만들수 있습니다.. 내장된 라이브러리를 대체할수도 있습니다..

아래에 설명된 내용들은 이러한 3 가지를 어떻게 할수 있는지 상세하게 설명합니다..

Note: 데이터베이스 클래스는 확장되거나 대체될 수 없습니다.그외 모든 클래스는 확장,대체될 수 있습니다.

저장

님하의 라이브러리는 반드시 application/libraries 에 위치해야합니다.CodeIgniter 가 초기화 과정에서 그 디렉토리를 살펴보기 때문입니다.

이름짓기 관례(Naming Conventions)

파일이름은 반드시 대문자로 시작해야합니다. 예제:  Myclass.php

클래스 선언부는 반드시 대문자로 시작해야합니다. 예:  class Myclass 클래스명과 파일명은 반드시 동일해야합니다.

클래스 파일

Page 56: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

클래스는 반드시 아래의 프로토타입 형태를 따라야합니다.(Note: Someclass 이라는 이름은 예를 든것입니다.):

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function some_function()

    {

    }

}

/* End of file Someclass.php */

여러분의 클래스를 사용하기

어떤 여러분의 콘트롤러 함수에서도 여러분의 클래스를 아래와 같이 초기화 할수 있습니다.:

$this->load->library('someclass');

someclass 는 파일 이름이고 ".php" 확장자는 붙이지 않습니다..여기에서 파일이름을 대문자로 쓰든 소문자로 쓰든 CodeIgniter 는 상관하지않고인식합니다..

일단 로드되면 여러분의 클래스를 lower case 소문자 버전으로 사용해야합니다:

$this->someclass->some_function();  // 객체는 항상 소문자로 사용되야합니다

여러분의 클래스 초기화 과정에 파라미터 넘겨주기

라이브러리 로드 함수에서 님하는 두번째 파라미터를 통하여 동적으로 데이터를 넘겨줄수 있습니다. 파라미터는 님하만의 클래스 생성자에 데이터를 넘겨줄것입니다.:

Page 57: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('Someclass', $params);

이렇게 사용하려면 님하는 반드시 님하만의클래스 생성자에 파라미터를처리하는 코드를 삽입해야합니다.:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)

    {

        // Do something with $params

    }

}

?>

여러분의 config 파일에 저장된 데이터를 파라미터로 전달할 수 있습니다..간단히 클래스의 파일이름과 동일한 config 파일을 생성하여 application/config/ 폴더안에 저장하세요 .위에 기술된대로 동적으로 파라미터를 전달한다면 config 을 이용하는 방법은 비활성(will not be available)화 될것입니다.

CodeIgniter 리소스를 여러분의 라이브러리와 함께 사용하기

직접 만든 라이브러리에서 CodeIgniter 에 내장된 리소스를 이용하려면 get_instance() 함수를 이용합니다. 그함수는 CodeIgniter 의 부모객체(super object)를 리턴합니다.

일반적으로 당신이 만든 컨트롤러함수에서 $this 를 사용하여 CodeIgniter 의 가능한 모든 함수들을 호출할것입니다.:

Page 58: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->helper('url');

$this->load->library('session');

$this->config->item('base_url');

etc.

그러나 $this 는 컨트롤러,뷰,모델에서만 직접적으로 사용할 수 있습니다.

만약 당신이 만든 라이브러리(custom class) 에서 CodeIgniter 의 클래스를 사용하고자한다면 아래와 같은 방법으로 해야합니다.:

먼저 CodeIgniter객체를 변수로 할당합니다.:

$CI =& get_instance();

한번 할당한 후에는 $this 를 썼던 것대신에 새로할당한 변수($CI)를 대신 사용하면 됩니다:

$CI =& get_instance();

$CI->load->helper('url');

$CI->load->library('session');

$CI->config->item('base_url');

etc.

Note: 위에 사용된 get_instance() 는 객체를 참조로 넘겨줍니다.(& 를 주목할것):

$CI =& get_instance();

이것은 매우 중요합니다. 참조로 넘겨준다는것은 복사본이 아니라 원본의 CodeIgniter 객체를 사용한다는것을 의미합니다.

내장된 라이브러리를 나만의 라이브러리로 대체하기 Replacing Native Libraries with Your Versions

간단히 당신의 라이브러리 이름을 내장된 라이브러리와 완전히 동일하게 하면 CodeIgniter 는 내장 라이브러리대신 당신의 라이브러리를 사용합니다. 이렇게 하려면 파일이름과 클래스 선언부를 내장라이브러리와 동일하게 하면 됩니다. 예를 들어, 내장 Email 라이브러리를

Page 59: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

대체하려면 application/libraries/Email.php 파일을 만들고 클래스를 아래와 같이 선언합니다.

class CI_Email {

}

주의 : 대부분의 내장라이브러리는 접두어 CI_를 사용합니다.

당신의 라이브러리를 로드 하라면 표준 로딩 함수를 사용하면 됩니다.:

$this->load->library('email');

Note: Database 클래스는 당신의 라이브러리로 대체될 수 없습니다..

내장 라이브러리의 확장 Extending Native Libraries

내장 라이브러리에 몇몇 기능요소들을 추가하려한다면(아마 한두개의 함수추가) 라이브러리 자체를 바꾸는것은 심한 오버헤드가 될것입니다. 이럴때는 간단히 내장라이브러리를 확장하는것이 현명합니다. 라이브러리확장은 몇가지를 제외하고는 라이브러리대체와 거의 비슷합니다.

클래스는 부모클래스(parent class)를 확장해야 한다.. 당신의 클래스이름 및 파일이름은 MY_ 로 시작해야한다.(이 접두어는 설정에서 변경할수

있습니다).

예를 들어 ,내장 Email 클래스를 확장하고자 한다면 application/libraries/MY_Email.php 파일을 생성하고 클래스를 아래와 같이 선언합니다:

class MY_Email extends CI_Email {

}

Note: 만약 당신의 클래스에서 생성자를 사용하고자 한다면 부모클래스의 생성자를 그 내부에서 호출해야한다는걸 잊지마세요 :

Page 60: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

class MY_Email extends CI_Email {

    public function __construct()

    {

        parent::__construct();

    }

}

당신의 확장 클래스를 로드하는법 (Loading Your Sub-class)

새롭게 만든 확장 클래스는 일반적인 클래스 로드와 동일한 방법으로 로드합니다.이때 접두어는 적으시면 안됩니다..예를들어 ,위의 예에서 만든 Email 클래스의 확장 클래스를 로드할때 아래와같이 합니다.:

$this->load->library('email');

한번 로드한 후에는 다른 일반적인 방법(확장하기전의 원본클래스를 사용하듯)과 동일하게 사용하면됩니다. 위에서 만든 Email 클래스의 경우 아래와 같이 사용합니다.:

$this->email->some_function();

나만의 접두어 설정 (Setting Your Own Prefix)

나만의 접두어를 설정하려면 application/config/config.php 파일을 열어 아래 변수를찾으세요 :

$config['subclass_prefix'] = 'MY_';

주의 : 모든 CodeIgniter 내장 라이브러리는 접두어로 CI_ 를 사용하므로 위 설정에서는 CI_ 를 사용하지 마세요 .

General Style and SyntaxThe following page describes the use of coding rules adhered to when developing CodeIgniter.

Table of Contents

Page 61: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

File Format PHP Closing Tag Class and Method Naming Variable Names Commenting Constants TRUE, FALSE, and NULL Logical Operators Comparing Return Values and Typecasting Debugging Code Whitespace in Files Compatibility Class and File Names using Common Words Database Table Names One File per Class Whitespace Line Breaks Code Indenting Bracket and Parenthetic Spacing Localized Text Private Methods and Variables PHP Errors Short Open Tags One Statement Per Line Strings SQL Queries Default Function Arguments

File Format

Files should be saved with Unicode (UTF-8) encoding. The BOM should not be used. Unlike UTF-16 and UTF-32, there's no byte order to indicate in a UTF-8 encoded file, and the BOM can have a negative side effect in PHP of sending output, preventing the application from being able to set its own headers. Unix line endings should be used (LF).Here is how to apply these settings in some of the more common text editors. Instructions for your text editor may vary; check your text editor's documentation.TextMate

Page 62: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

1. Open the Application Preferences2. Click Advanced, and then the "Saving" tab3. In "File Encoding", select "UTF-8 (recommended)"4. In "Line Endings", select "LF (recommended)"5. Optional: Check "Use for existing files as well" if you wish to modify the line

endings of files you open to your new preference.BBEdit

1. Open the Application Preferences2. Select "Text Encodings" on the left.3. In "Default text encoding for new documents", select "Unicode (UTF-8, no

BOM)"4. Optional: In "If file's encoding can't be guessed, use", select "Unicode (UTF-8,

no BOM)"5. Select "Text Files" on the left.6. In "Default line breaks", select "Mac OS X and Unix (LF)"

PHP Closing Tag

The PHP closing tag on a PHP document ?> is optional to the PHP parser. However, if used, any whitespace following the closing tag, whether introduced by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages. For this reason, all PHP files should OMIT the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root. This allows you to still identify a file as being complete and not truncated.

INCORRECT:

<?php

echo "Here's my code!";

?>

CORRECT:

Page 63: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

<?php

echo "Here's my code!";

/* End of file myfile.php */

/* Location: ./system/modules/mymodule/myfile.php */

Class and Method Naming

Class names should always start with an uppercase letter. Multiple words should be separated with an underscore, and not CamelCased. All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb. Try to avoid overly long and verbose names.

INCORRECT:

class superclass

class SuperClass

CORRECT:

class Super_class class Super_class {

function __construct()

{

Page 64: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

}

}

Examples of improper and proper method naming:

INCORRECT:

function fileproperties() // not descriptive and needs underscore separator

function fileProperties() // not descriptive and uses CamelCase

function getfileproperties() // Better! But still missing underscore separator

function getFileProperties() // uses CamelCase

function get_the_file_properties_from_the_file() // wordy

CORRECT:

function get_file_properties() // descriptive, underscore separator, and all lowercase

letters

Variable Names

The guidelines for variable naming is very similar to that used for class methods. Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.

INCORRECT:

$j = 'foo'; // single letter variables should only be used in for() loops

Page 65: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$Str // contains uppercase letters

$bufferedText // uses CamelCasing, and could be shortened without losing

semantic meaning

$groupid // multiple words, needs underscore separator

$name_of_last_city_used // too long

CORRECT:

for ($j = 0; $j < 10; $j++)

$str

$buffer

$group_id

$last_city

Commenting

In general, code should be commented prolifically. It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line. There is not a required format for comments, but the following are recommended.DocBlock style comments preceding class and method declarations so they can be picked up by IDEs:

/**

Page 66: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

* Super Class

*

* @package Package Name

* @subpackage Subpackage

* @category Category

* @author Author Name

* @link http://example.com

*/

class Super_class { /**

* Encodes string for use in XML

*

* @access public

* @param string

* @return string

*/

function xml_encode($str)

Use single line comments within code, leaving a blank line between large comment blocks and code.

Page 67: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

// break up the string by newlines

$parts = explode("\n", $str);

// A longer comment that needs to give greater detail on what is

// occurring and why can use multiple single-line comments. Try to

// keep the width reasonable, around 70 characters is the easiest to

// read. Don't hesitate to link to permanent external resources

// that may provide greater detail:

//

// http://example.com/information_about_something/in_particular/

$parts = $this->foo($parts);

Constants

Constants follow the same guidelines as do variables, except constants should always be fully uppercase. Always use CodeIgniter constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.

INCORRECT:

myConstant // missing underscore separator and not fully uppercase

N // no single-letter constants

Page 68: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

S_C_VER // not descriptive

$str = str_replace('{foo}', 'bar', $str); // should use LD and RD constants

CORRECT:

MY_CONSTANT

NEWLINE

SUPER_CLASS_VERSION

$str = str_replace(LD.'foo'.RD, 'bar', $str);

TRUE, FALSE, and NULL

TRUE, FALSE, and NULL keywords should always be fully uppercase.

INCORRECT:

if ($foo == true)

$bar = false;

function foo($bar = null)

CORRECT:

if ($foo == TRUE)

Page 69: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$bar = FALSE;

function foo($bar = NULL)

Logical Operators

Use of || is discouraged as its clarity on some output devices is low (looking like the number 11 for instance). && is preferred over AND but either are acceptable, and a space should always precede and follow !.

INCORRECT:

if ($foo || $bar)

if ($foo AND $bar) // okay but not recommended for common syntax highlighting applications

if (!$foo)

if (! is_array($foo))

CORRECT:

if ($foo OR $bar)

if ($foo && $bar) // recommended

if ( ! $foo)

if ( ! is_array($foo))

Comparing Return Values and Typecasting

Page 70: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons. Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.

Use the same stringency in returning and checking your own variables. Use === and !== as necessary. INCORRECT:

// If 'foo' is at the beginning of the string, strpos will return a 0,

// resulting in this conditional evaluating as TRUE

if (strpos($str, 'foo') == FALSE)

CORRECT:

if (strpos($str, 'foo') === FALSE)

INCORRECT:

function build_string($str = "")

{

if ($str == "") // uh-oh! What if FALSE or the integer 0 is passed as an argument?

{

}

}

Page 71: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CORRECT:

function build_string($str = "")

{

if ($str === "")

{

}

}

See also information regarding typecasting, which can be quite useful. Typecasting has a slightly different effect which may be desirable. When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":

$str = (string) $str; // cast $str as a string

Debugging Code

No debugging code can be left in place for submitted add-ons unless it is commented out, i.e. no var_dump(), print_r(), die(), and exit() calls that were used while creating the add-on, unless they are commented out.

// print_r($foo);

Whitespace in Files

No whitespace can precede the opening PHP tag or follow the closing PHP tag. Output is buffered, so whitespace in your files can cause output to begin before CodeIgniter outputs its content, leading to errors and an inability for CodeIgniter to send proper headers. In the examples below, select the text with your mouse to reveal the incorrect whitespace.INCORRECT:

Page 72: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

<?php

// ...there is whitespace and a linebreak above the opening PHP tag

// as well as whitespace after the closing PHP tag

?>

CORRECT:

<?php

// this sample has no whitespace before or after the opening and closing PHP tags

?>

Compatibility

Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 5.1+. Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.

Class and File Names using Common Words

When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision. Always realize that your end users may be running other add-ons or third party PHP scripts. Choose a prefix that is unique to your identity as a developer or company.

INCORRECT:

class Email pi.email.php

class Xml ext.xml.php

Page 73: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

class Import mod.import.php

CORRECT:

class Pre_email pi.pre_email.php

class Pre_xml ext.pre_xml.php

class Pre_import mod.pre_import.php

Database Table Names

Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name. You do not need to be concerned about the database prefix being used on the user's installation, as CodeIgniter's database class will automatically convert 'exp_' to what is actually being used.

INCORRECT:

email_addresses // missing both prefixes

pre_email_addresses // missing exp_ prefix

exp_email_addresses // missing unique prefix

CORRECT:

exp_pre_email_addresses

Page 74: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

NOTE: Be mindful that MySQL has a limit of 64 characters for table names. This should not be an issue as table names that would exceed this would likely have unreasonable names. For instance, the following table name exceeds this limitation by one character. Silly, no? exp_pre_email_addresses_of_registered_users_in_seattle_washington

One File per Class

Use separate files for each class your add-on uses, unless the classes are closely related. An example of CodeIgniter files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.

Whitespace

Use tabs for whitespace in your code, not spaces. This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use. And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.

Line Breaks

Files must be saved with Unix line breaks. This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.

Code Indenting

Use Allman style indenting. With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.

INCORRECT:

function foo($bar) {

// ...

}

Page 75: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

foreach ($arr as $key => $val) {

// ...

}

if ($foo == $bar) {

// ...

} else {

// ...

}

for ($i = 0; $i < 10; $i++)

{

for ($j = 0; $j < 10; $j++)

{

// ...

}

}

Page 76: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CORRECT:

function foo($bar)

{

// ...

}

foreach ($arr as $key => $val)

{

// ...

}

if ($foo == $bar)

{

// ...

}

else

{

// ...

Page 77: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

}

for ($i = 0; $i < 10; $i++)

{

for ($j = 0; $j < 10; $j++)

{

// ...

}

}

Bracket and Parenthetic Spacing

In general, parenthesis and brackets should not use any additional spaces. The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.

INCORRECT:

$arr[ $foo ] = 'foo';

CORRECT:

$arr[$foo] = 'foo'; // no spaces around array keys

Page 78: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

INCORRECT:

function foo ( $bar )

{

}

CORRECT:

function foo($bar) // no spaces around parenthesis in function declarations

{

}

INCORRECT:

foreach( $query->result() as $row )

CORRECT:

foreach ($query->result() as $row) // single space following PHP control structures, but not in

interior parenthesis

Page 79: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Localized Text

Any text that is output in the control panel should use language variables in your lang file to allow localization.

INCORRECT:

return "Invalid Selection";

CORRECT:

return $this->lang->line('invalid_selection');

Private Methods and Variables

Methods and variables that are only accessed internally by your class, such as utility and helper functions that your public methods use for code abstraction, should be prefixed with an underscore.

convert_text() // public method

_convert_text() // private method

PHP Errors

Code must run error free and not rely on warnings and notices to be hidden to meet this requirement. For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment. You can check this setting with:

if (ini_get('display_errors') == 1)

{

exit "Enabled";

Page 80: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

}

On some servers where display_errors is disabled, and you do not have the ability to change this in the php.ini, you can often enable it with:

ini_set('display_errors', 1);

NOTE: Setting the display_errors setting with ini_set() at runtime is not identical to having it enabled in the PHP environment. Namely, it will not have any effect if the script has fatal errors

Short Open Tags

Always use full PHP opening tags, in case a server does not have short_open_tag enabled.

INCORRECT:

<? echo $foo; ?>

<?=$foo?>

CORRECT:

<?php echo $foo; ?>

One Statement Per Line

Never combine statements on one line.

INCORRECT:

$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);

Page 81: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CORRECT:

$foo = 'this';

$bar = 'that';

$bat = str_replace($foo, $bar, $bag);

Strings

Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing. You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.

INCORRECT:

"My String" // no variable parsing, so no use for

double quotes

"My string $foo" // needs braces

'SELECT foo FROM bar WHERE baz = \'bag\'' // ugly

CORRECT:

'My String'

"My string {$foo}"

"SELECT foo FROM bar WHERE baz = 'bag'"

Page 82: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

SQL Queries

MySQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN, etc.Break up long queries into multiple lines for legibility, preferably breaking for each clause.

INCORRECT:

// keywords are lowercase and query is too long for

// a single line (... indicates continuation of line)

$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from

exp_pre_email_addresses

...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");

CORRECT:

$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz

FROM exp_pre_email_addresses

WHERE foo != 'oof'

AND baz != 'zab'

ORDER BY foobaz

LIMIT 5, 100");

Default Function Arguments

Page 83: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Whenever appropriate, provide function argument defaults, which helps prevent PHP errors with mistaken calls and provides common fallback values which can save a few lines of code. Example:

function foo($bar = '', $baz = FALSE)

CI 예약어 목록 Reserved NamesCodeIgniter 에서는 아래와 같은 예약어가 있으므로 ,여러분은 개발시 사용할수 없습니다.

컨트롤러 이름(Controller names)

여러분의 컨트롤러는 부모클래스로부터 상속받아 작성되기때문에 부모클래스에서 사용하는 함수이름을 사용하지않도록 주의해야합니다. 그렇지않으면 부모클래스의 함수를 재정의 해버리기때문에 오작동 합니다.

아래는 예약어 목록입니다. 아래 목록을 컨트롤러 이름으로 사용할 수 없습니다. Controller CI_Base Default _ci_scaffolding

함수명(Functions)

is_really_writable() load_class() get_config() config_item() show_error() show_404() log_message() _exception_handler() get_instance()

변수명(Variables)

$config $mimes $lang

상수명(Constants)

Page 84: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

ENVIRONMENT EXT FCPATH SELF BASEPATH APPPATH CI_VERSION FILE_READ_MODE FILE_WRITE_MODE DIR_READ_MODE DIR_WRITE_MODE FOPEN_READ FOPEN_READ_WRITE FOPEN_WRITE_CREATE_DESTRUCTIVE FOPEN_READ_WRITE_CREATE_DESTRUCTIVE FOPEN_WRITE_CREATE FOPEN_READ_WRITE_CREATE FOPEN_WRITE_CREATE_STRICT FOPEN_READ_WRITE_CREATE_STRICT

프로파일링 Profiling Your Application프로파일러 클래스는 벤치마크결과,여러분이 수행한 쿼리,$_POST 데이터를 여러분의 페이지 하단에 보여줄것입니다..

이런 정보들은 개발시 디버깅이나 최적화 작업을 하는데 도움이 될 것입니다..

클래스 초기화

Important:  본 클래스는 초기화가 필요없습니다.만약 아래에서 설명하는 대로 프로파일링이 활성(enable)화 되어있다면 출력클래스(Output Class)i 에서 자동으로 초기화됩니다.

프로파일링 활성화(Enabling the Profiler)

프로파일링을 활성화 하려면 아래와같은 코드를 여러분 컨트롤러의 어떤 곳에서든지 삽입하시면 됩니다.:

$this->output->enable_profiler(TRUE);

Page 85: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

활성화 되면 리포트가 생성되고 여러분 페이지의 하단에 삽입됩니다.

프로파일링을 비활성화 하려면 아래의 코드를 삽입하세요.:

$this->output->enable_profiler(FALSE);

벤치마크 포인트 설정(Setting Benchmark Points)

프로파일러가 벤치마크 결과를 컴파일 하기위해서는 특정한 문법으로 벤치마크 포인트를 지정해 주어야합니다.

벤치마크 포인트 설정에 관해서는 벤치마크(Benchmark Class) 페이지를 참고하세요

프로파일 섹션의 활성화 및 비활성화

각 섹션의 프로파일 데이타를 활성/비활성화 하려면, 해당 설정값을 TRUE 나 FALSE 로 설정하세요. 설정에는 두가지 방법이 있습니다.응용프로그램 단위로 설정하려면 application/config/profiler.php 에서 하세요.

$config['config']          = FALSE;

$config['queries']         = FALSE;

컨트롤러에서 출력클래스 의 set_profiler_sections()를 호출하면 설정된 기본값 덮어 쓸 수 있습니다:

$sections = array(

    'config'  => TRUE,

    'queries' => TRUE

    );

Page 86: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->output->set_profiler_sections($sections);

사용 가능한 섹션과 필요한 배열의 키는 다음의 표와 같습니다.

키 설명 기본값

benchmarks 벤치 마크 포인트에서 경과 시간과 총 실행 시간 TRUE

config CodeIgniter 설정 변수 TRUE

controller_info 요청된 컨트롤러 클래스와 메소드 TRUE

get 요청에 전달된 모든 GET 데이터 TRUE

http_headers 현재 요청의 HTTP 헤더 TRUE

memory_usage 현재 요청에서 사용된 메모리 용량(Bytes) TRUE

post 요청에 전달된 모든 POST 데이터 TRUE

queries 실행 시간을 포함하여 실행된 모든 데이터베이스 쿼리 목록 TRUE

uri_string 현재 요청 URI TRUE

query_toggle_count 숨길 쿼리블록수 의 기본 값 설정 25

리소스 자동로딩 Auto-loading ResourcesCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다. 만약 특정리소스가 전체 프로그램에서 작동해야한다면, 자동 로드 기능을 사용하시는것이 편리합니다..

다음의 리소스들이 자동으로 로드 가능합니다.:

"libraries"안의 코어클래스들

"helpers" 폴더안의 헬퍼 클래스들

"config" 폴더안에 사용자 설정파일들

"system/language" 안의 언어 파일들

"models" 폴더안의 모델들

리소스를 자동으로 로드하기 위해서는 application/config/autoload.php 파일을 연다음 autoload 배열에 추가하시면됩니다. 각 리소스의 사용자가이드에서도 자동로드 방법을 설명해 두었습니다..

Note: 파일확장자(.php)를 자동로드 배열에 같이 쓰시면 안됩니다.

Page 87: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

URI 라우팅 규칙 Routing일반적으로 URL 문자열과 클래스/함수 간에는 1 대 1 관계를 이룹니다

URL 의 세그먼트는 통상 다음의 형태를 따릅니다:

example.com/class/function/id/

그러나 어떤 경우에는 위와같은 1 대 1 매칭 대신 다른 클래스 나 함수를 호출하고자 할때도 있을것입니다.

예를들어 여러분은 아래와 같은 형식의 URL 을 원한다고 합시다:example.com/product/1/example.com/product/2/example.com/product/3/example.com/product/4/

일반적으로 두번째 새그먼트는 함수이름이 되어야하나 , 위의 예에서는 함수이름대신 제품 ID 입니다.

이렇게 하려면 CodeIgniter 의 재매핑(remap) 기능을 사용하시면 됩니다.

나만의 라우팅 규칙 설정하기

라우팅 규칙은 application/config/routes.php 파일에 정의되어있습니다.해당파일을 보시면 $route 배열이 있는데 그 배열을 통해 여러분만의 라우팅 규칙을 설정할 수 있습니다.라우팅은 와일드카드(*) 나 정규표현식 으로도 설정할 수 있습니다.

와일드 카드(*)

일반적인 와일드 카드 라우팅은 아래와 같이 설정합니다:

$route['product/:num'] = "catalog/product_lookup";

라우팅 설정에서 배열의 키는 호출될 URI 를 나타내며, 배열의 값은 매핑될 도착지(실제로 사용자에게 보여질 URI)를 나타냅니다.

위 예제에서 요청되는 URL 의 첫번째 새그먼트가 "product"이고 두번째 새그먼트가 숫자 가 됩니다. 이런 URL 요청이 들어오면 자동으로 catalog 클래스의 product_lookup 함수가 호출됩니다.

라우팅에서 사용할수 있는 와일드 카드는 아래와같이 두가지(숫자,모든것)입니다.:

(:num) 숫자로만 구성된 세그먼트와 일치합니다.(:any) 모든 문자와 일치합니다.

Page 88: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

Note: 라우팅 설정은 상위에 설정된것이 하위에 설정된것보다 우선실행됩니다.

예제

여기 몇몇 라우팅 예제가 있습니다:

$route['journals'] = "blogs";

URL 이 첫번째 새그먼트로 "journals" 을 가지고있다면 "blogs" 클래스로 재매핑 됩니다.

$route['blog/joe'] = "blogs/users/34";

URL 이 blog/joe 와같은 새그먼트를 포함하고 있다면 "blogs" 클래스의 "users" 함수로 재미핑되며 ID 값으로 "34" 가 설정됩니다.

$route['product/(:any)'] = "catalog/product_lookup";

URL 이 첫 새그먼트로 "product"를 포함하고 있고 두번째 세그먼트가 숫자라면"catalog" 클래스의 "product_lookup" 함수로 재매핑 됩니다.

$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";

URL 이 첫 새그먼트로 "product" 를 포함하고 있고 두번째 세그먼트가 숫자라면"catalog" 클래스의"product_lookup_by_id" 함수로 연결되며 두번째 새그먼트는 변수로서 함수에 전달돌것입니다.

Important: Do not use leading/trailing slashes.

정규표현식

라우팅 규칙을 설정하는데 정규표현식을 사용하고싶다면 가능합니다

어떤 정규표현식도 후위참조(back-references)로서 사용가능합니다

Note:  후위참조(back-references)를 사용하실때는 이중 백슬래쉬(\\)대신 달러($)를 사용해야합니다..

정규표현식 경로설정은 일반적으로 다음의 형태를 가집니다:

$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

Page 89: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위 예제에서는, products/shirts/123 같은 경로가 shirts 컨트롤러의 id_123 함수로 매핑될 것입니다.

또한,와일드 카드 및 정규표현식경로를 섞어 쓸수있습니다.

예약된 라우팅 경로 (Reserved Routes)

예약된 경로는 두가지가 있습니다:

$route['default_controller'] = 'welcome';

위 라우팅 경로는 URI 가 아무런 데이터도 포함하지않았을때 어떤 컨트롤러가 로드 될지 나타냅니다. 루트경로를 호출했을경우가 이에 해당합니다.

위 예제의 경우 welcome 클래스가 로드될것입니다. 항상 기본 라우팅경로를 설정해둘것을 권장합니다. 그렇지않으면 404 에러페이지를 기본으로 내보낼테니까요.

$route['404_override'] = '';

이 라우팅 경로는 요청된 컨트롤러가 없으면 어떤 컨트롤러를 불러야 여부를 지정하는 것입니다. 이 설정은 기본 설정된 404 페이지를 덮어 씁니다. application/errors/error_404.php 의 기본 error_404.php 파일을 로드하는 show_404() 함수에는 영향을주지 않습니다. 

Important:  예약된경로는 어떤 와일드카드,정규표현식 경로보다 앞에 와야합니다..

에러 핸들링 Error HandlingCodeIgniter 는 아래 함수들을 이용하여 여러분 프로그램에서 에러에 대한 리포트를 생성하도록 지원합니다.게다가,에러 로깅(error logging )클래스도 제공합니다. 에러로깅 클래스를 이용하면 에러를 텍스트 파일로 저장할 수 있습니다.

Note: CodeIgniter 의 기본설정은 모든 PHP 에러를 표시하는 것입니다. 그런데 님하의 프로그램 개발이 완료되었을때 이런 기본 설정을 변경하고 싶을 수 있습니다. 메인 index.php 의 맨윗쪽에 error_reporting() 함수가 있습니다. error reporting 을 disable 하는것이 에러 로그파일을 기록하는것 까지 disable 하지는 않습니다.

대부분 CodeIgniter 의 시스템과는달리 ,에러 함수는 절차적 인터페이스를 가지며 프로그램 전반에 걸쳐 글로벌 하게 사용할 수 있다.

이런 접근방법은 클래스나 함수의 스코프에 상관없이 에러 메시지를 생성하게 해줍니다.

다음 함수는 에러를 생성하도록 해줍니다.:

Page 90: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

show_error('message')

이 함수는 아래 템플릿을 이용하여 에러메세지를 표시합니다.:

application/errors/error_general.php

show_404('page' [, 'log_error'])

이 함수는 아래 템플릿을 이용하여 404 에러메세지를 표시합니다.

application/errors/error_404.php이 함수는 발견되지않은(not found) 페이지의 경로를 문자열로 전달받을것을 가정합니다.

주의 : CodeIgniter 는 컨트롤러를 발견할 수 없으면 자동적으로 404 에러메세지를 표시합니다.

모든 show_404() 호출은 로그에 기록됩니다. 두번째 파라미터를 FALSE 로 하면 로그에 기록하지 않습니다.

log_message('level', 'message')

이함수는 로그파일에 에러메세지를 쓸수 있도록 합니다. 먼저 3 개의 에러타입(debug, error, info)중 하나의 타입을 첫번째 파라미터로 전달해야합니다.메세지는 두번째 파라미터로 전달합니다.

예제:

if ($some_var == "")

{

    log_message('error', 'Some variable did not contain a value.');

}

else

Page 91: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

{

    log_message('debug', 'Some variable was correctly set');

}

log_message('info', 'The purpose of some variable is to provide some value.');

3 가지 메세지 타입이 있습니다:

1. Error 메세지 : PHP 에러나 사용자 에러등 진짜 에러 메시지.2. Debug 메세지: 디버그를 도와주는 메세지.예를 들어, 클래스가 초기화되면 님하는

debugging 정보로 파일에 기록할 수 있습니다.3. Informational 메세지 : 이 메시지는 가장 우선순위가 낮은 메세지 . 단순히 어떤

프로세스에 대한 메세지를 제공합니다. CodeIgniter 는 Info 메세지를 작성하지않습니다만, 님하가 원하시는 메세지를 스스로 기록하실수있습니다.

Note: 로그파일을 기록하려면 "logs" 폴더에 쓰기권한이 있어야합니다.또한 , application/config/config.php 에서 쓰레스홀드("threshold)를 먼저 세팅해야합니다.예를 들어 , 에러메세지만 기록하고 싶을수도 있겠죠 ?. 제로로 세팅하시면 로깅은 비활성화(disabled) 될것입니다.

트랙백 Trackback Class트랙백 클래스를 이용하시면 트랙백데이터를 보내거나 받을 수 있습니다.

트랙백에 익숙하지않으시면 여기를 참조해주세요.

클래스 초기화 Initializing the Class

CodeIgniter 의 다른 클래스들 처럼 , 트랙백클래스도 컨트롤러에서 $this->load->library 함수를 이용해 초기화 합니다:

Page 92: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->library('trackback');

일단 로드 되면, $this->trackback 로 트랙백 객체를 이용하시면됩니다.

트랙백 보내기 Sending Trackbacks

컨트롤러내 어떤 함수에서라도 아래와 같은 코드로 트랙백을 보낼수 있습니다:

$this->load->library('trackback');

$tb_data = array(

                'ping_url'  => 'http://example.com/trackback/456',

                'url'       => 'http://www.my-example.com/blog/entry/123',

                'title'     => 'The Title of My Entry',

                'excerpt'   => 'The entry content.',

                'blog_name' => 'My Blog Name',

                'charset'   => 'utf-8'

                );

Page 93: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

if ( ! $this->trackback->send($tb_data))

{

     echo $this->trackback->display_errors();

}

else

{

     echo 'Trackback was sent!';

}

배열 데이터 설명:

ping_url - 트랙백을 보내는 사이트의 URL 입니다(여러분 사이트의 입장에서 보면 받는 사이트가 되겠죠). 콤마로 구분하여 여러 URL 에 보낼수도 있습니다.

url - 웹로그표제어(weblog entry)를 가지고 있는여러분 사이트의 URL 입니다. title - 웹로그표제어의 제목입니다. excerpt - 여러분의 웹로그표제어의 내용입니다. 참고: 트랙백클래스는 표제어중 앞 500글자만 자동전송하며, HTML 을 모두 벗겨집니다(제거됩니다).

blog_name - 웹로그의 이름입니다. charset - 여러분 웹로그의 문자 인코딩입니다.생략하시면, UTF-8 이 사용됩니다.

트랙백 전송함수는 성공여부에 따라서 TRUE/FALSE 를 반환합니다.실패한다면, 아래함수를 사용하여 에러메세지를 추출하실 수 있습니다:

Page 94: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->trackback->display_errors();

트랙백 받기 Receiving Trackbacks

트랙벡을 받기전에 반드시 웹로그(weblog)를 생성하셔야 합니다. 만약 아직 블로그가 없으시다면, 더 진행하는것은 의미가 없겠죠 .

트랙백을 받는것은 보내는것보다 약간 더 복잡합니다 . 받은것을 저장할 데이터베이스 테이블이 필요하고 , 입력되는 트랙백데이터가 유효한지도 확인해야 하기때문 입니다. 스팸이나, 중복데이터를 방지하기 위해서 전반적인 검증코드의 작성이 필요합니다.또한 특정 IP 에서 주어진 시간간격안에 넘어오는 트랙백 개수를 제한하여 스팸을 방지할 필요도 있을것입니다. 트랙백을 받는 절차는 상당히 간단합니다.; 검증부분이 대부분의 작업을 차지합니다.

Your Ping URL

트랙백을 수신하기 위해서는 각 웹로그표제어(weblog entries)옆에 트랙백 URL 을 표시해야 합니다.이 URL 을 가지고 사람들은 여러분에게 트랙백을 보낼수 있게 됩니다 (우리는 이것을 여러분의 "Ping URL"로 참조하게 됩니다).

Ping URL 은 트랙백을 수신할 컨트롤러의 함수를 가리키고 있어야 하며, 각 웹로그표제어의 아이디를 포함해야 합니다. 그래야만 트랙백을 수신받았을때 , 특정표제어와 연관시켜 작업하실 수 있습니다.

예를들어, 컨트롤러 클래스가 Trackback 이고, 수신함수가 receive 이면 Ping URL 은 아래와 같이 구성됩니다:

http://example.com/index.php/trackback/receive/entry_id

entry_id 는 여러분 웹로그 각 표제어의 유일한 아이디 입니다.

트랙백 테이블 생성 Creating a Trackback Table

트랙백을 수신하기전에 수신한 트랙백을 저장할 테이블을 만들어야 합니다. 아래는 그 테이블의 기본 프로토타입입니다:

Page 95: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

트랙백의 정의에서는 수신할때 단지 4 개의 정보만을 요구합니다[url, 제목(title), 발췌문(excerpt),블로그이름( blog_name)]. 그러나 데이터 사용성을 높이기위해 우리는 몇개의 필드를 더 추가했습니다(날짜, IP 주소 등).

트랙백 처리 Processing a Trackback

아래는 어떻게 트랙백을 수신하여 처리하는지를 보여주는 예제입니다. 아래코드는 트랙백을 수신하는 컨트롤러 함수내에서 사용해야합니다.

$this->load->library('trackback');

$this->load->database();

if ($this->uri->segment(3) == FALSE)

{

    $this->trackback->send_error("Unable to determine the entry ID");

}

CREATE TABLE trackbacks ( tb_id int(10) unsigned NOT NULL auto_increment, entry_id int(10) unsigned NOT NULL default 0, url varchar(200) NOT NULL, title varchar(100) NOT NULL, excerpt text NOT NULL, blog_name varchar(100) NOT NULL, tb_date int(10) NOT NULL, ip_address varchar(16) NOT NULL, PRIMARY KEY tb_id ( tb_id ), KEY entry_id ( entry_id ));

Page 96: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

if ( ! $this->trackback->receive())

{

    $this->trackback->send_error("The Trackback did not contain valid data");

}

$data = array(

                'tb_id'      => '',

                'entry_id'   => $this->uri->segment(3),

                'url'        => $this->trackback->data('url'),

                'title'      => $this->trackback->data('title'),

                'excerpt'    => $this->trackback->data('excerpt'),

Page 97: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                'blog_name'  => $this->trackback->data('blog_name'),

                'tb_date'    => time(),

                'ip_address' => $this->input->ip_address()

                );

$sql = $this->db->insert_string('trackbacks', $data);

$this->db->query($sql);

$this->trackback->send_success();

참고:

표제어아이디(entry ID)번호는 URL 의 세번째 파라미터로 넘어온다고 가정합니다. 이것은 이전에 부여했던 URI 예제에 근거합니다:

http://example.com/index.php/trackback/receive/entry_id

표제어아이디(entry_id)는 URI 세그먼트의 세번째 요소이고,아래아 같이 추출해 낼수 있습니다:

$this->uri->segment(3);

Page 98: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위의 트랙백 수신코드에서는 ,세번째 세그먼트가 빠질경우, 에러가 발생됩니다. 유효한 표제어아이디(entry ID)가 없을경우 , 계속할 필요가 없겠죠 .

$this->trackback->receive() 함수는 들어오는데이터를 조사하여 필요한 4 가지 데이터(url, title, excerpt, blog_name)가 포함되어있는지를 확인합니다. 그 결과에따라서 TRUE 나 FALSE 를 반환합니다. 실패시 에러메세지를 발생시킵니다.

들어오는 트랙백데이터는 아래와 같이 추출할수 있습니다:

$this->trackback->data('item')

item 부분은 4 가지 정보중 하나를 나타냅니다: url, title, excerpt, or blog_name

트랙백데이터가 성공적으로 수신되면, 여러분은 아래와 같이 성공메세지를 발생시키시겠지요 :

$this->trackback->send_success();

참고: 위 코드는 데이터검증부분이 빠져있으므로 여러분이 직접 추가하셔야 합니다.

출력 Output Class출력클래스는 하나의 주 함수를 가진 작은 클래스 입니다: 브라우저로 최종결과물을 보낼때 사용합니다.또한 웹페이지의 캐싱(caching) 을 사용하신다면 그부분도 담당합니다.

참고: 이클래스는 시스템에서 자동으로 초기화 됩니다.

일반적인 상황에서 여러분은 출력클래스의 존재를 알아채지도 못할것입니다. 출력클래스는 여러분의 간섭이 필요하지않으며 투명하게 작동합니다. 예를들어 ,뷰 파일을 로드하기 위해 로더(Loader) 클래스를 사용할때 , 로더는 자동으로 그것을 CI 에서 최종적으로 자동 호출 되는 출력클래스로 전달합니다. 그러나, 필요하면 다음 두 함수를 이용하여 출력클래스를 작동에 여러분이 끼어들수 있습니다:

$this->output->set_output();

최종 출력 문자열을 수동으로 설정할수 있도록 해 줍니다. 사용예:

$this->output->set_output($data);

중요: 만약 출력을 수동으로 설정한다면, 출력설정을 하는 함수에서 마지막으로 수행하는 작업이 되어야 합니다. 예를들어 , 컨트롤러의 어떤함수에서 페이지를 생성한다면, 반드시 맨 마지막에 출력을 설정하셔야 합니다.

$this->output->set_content_type();

Page 99: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

JSON 데이터, JPEG's, XML 등을 손쉽게 제공하기 위해서 마임타입을 (mime-type)을 설정합니다.

$this->output

    ->set_content_type('application/json')

    ->set_output(json_encode(array('foo' => 'bar')));

$this->output

    ->set_content_type('jpeg') // You could also use ".jpeg" which will have the full stop

removed before looking in config/mimes.php

    ->set_output(file_get_contents('files/something.jpg'));

주의: config/mimes.php 에 있는 마임타입 외의 것을 설정하면, 작동하지않습니다.

$this->output->get_output();

출력 클래스에서 저장을 위해서 전송되는 어떤 내용이라도 뽑아낼수 있게 해줍니다.사용예:

$string = $this->output->get_output();

이미 출력클래스로 전송된 데이터만 가져올수 있다는것을 명심하세요 .예를들어 $this->load->view()함수 등을 호출하면 데이터가 출력클래스로 전송된답니다.

$this->output->append_output();

출력 문자열에 데이터를 추가합니다. 예:

Page 100: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->output->append_output($data);

$this->output->set_header();

서버헤더(server headers)를 설정하는데 사용합니다.예:

$this->output->set_header("HTTP/1.0 200 OK");

$this->output->set_header("HTTP/1.1 200 OK");

$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_update).' GMT');

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");

$this->output->set_header("Cache-Control: post-check=0, pre-check=0");

$this->output->set_header("Pragma: no-cache");

$this->output->set_status_header();

서버상태를 설정하는데 사용합니다 예:

$this->output->set_status_header('401');

// Sets the header as: Unauthorized

여기 를 보시면 헤더 전체 목록이 있습니다.

$this->output->enable_profiler();

Page 101: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

프로파일러(Profiler)를 활성/비활성 할하는데 사용합니다. 프로파일러는 디버깅이나 프로세스 최적화를위해 벤치마크등의 정보를 페이지 하단에표시 합니다.

프로파일러를 활성화(enable)하려면 아래코드를 컨트롤러(Controller) 에서 원하는 함수에 추가하시면 됩니다:

$this->output->enable_profiler(TRUE);

활성화되면 페이지의 맨 아래에 리포트가 생성됩니다.

비활성으로 하시려면 아래와 같이 합니다:

$this->output->enable_profiler(FALSE);

$this->output->set_profiler_sections();

프로파일러가 활성화 된 경우 특정 색션을 켜거나 끌수 있습니다. 상세한 정보는프로파일러 페이지에...

$this->output->cache();

CodeIgniter 출력라이브러리는 캐시도 컨트롤합니다. 자세한정보는 , 캐싱문서(caching documentation)를 보세요.

Parsing Execution Variables

기본값으로, CodeIgniter 는 출력 중에 의사 변수 {elapsed_time} 와 {memory_usage} 을 분석합니다. 이것을 비활성화하려면 컨트롤러에서 클래스 속성

$parse_exec_vars 를 FALSE 로 설정합니다. $this->output->parse_exec_vars =

FALSE;

보안 클래스

보안클래스는 입력 값을 안전히 처리하여, 보다 안전한 프로그램을 만드는데 도움이 되는 메서드들을 제공합니다.

XSS 필터링

CodeIgniter 에서는 크로스 사이트 스크립팅 공격을 방지하기 위해 모든 POST 와 COOKIE 데이터를 자동으로 필터링 할 수도 있고, 개별 아이템별로 필터링 할 수도 있습니다.

Page 102: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

전역적으로 동작하지 않는것이 기본값입니다.왜냐하면, 처리시 약간의 오버헤드가 존재하기도 하고, 개발자에게 선택권을 주기 위해서 입니다.

XSS 필터는 자바스크립트실행을 시도한다거나, 쿠키를 하이재킹한다거나, 다른 해괴망측한 짓거리들을 한다거나 하는것을 막는 기술입니다.만약 금지된 문자나 코드(위 짓거리들을 하려는)등을 찾으면 데이터를 안전한 HTML 엔터티로 변환하여 표시합니다.

안내: 이기능은 입력데이터 처리용으로만 사용하세요 . 처리시 오버헤드가 심해질수 있으므로(시스템 리소스 많이먹음) 다른 처리에서는 사용하지 않는것이 좋습니다.

XSS 필터를 이용하여 필터하려면 아래 함수를 사용하세요:

$this->security->xss_clean()

사용예:

$data = $this->security->xss_clean($data);

항상 자동으로 POST 및 COOKIE 데이터를 필터링하려면 application/config/config.php 를 열고 다음과 같이 설정하십시오.

config['global_xss_filtering'] = TRUE;

안내: form validation 클래스에도 XSS 필터링 기능을 사용할 수 있는 옵션이 있습니다.

옵션으로 제공되는 두번째 파라미터 is_image 는 이미지를 검사하여 잠재적 XSS 공격을 방지합니다. 파일업로드시 유용합니다. 두번째 파라미터가 TRUE 이면 처리된 문자열을 반환하는 대신 이미지가 안전한 경우 TRUE 를, 악의적인 정보가 포함된 경우 FALSE 를 반환합니다.

if ($this->security->xss_clean($file, TRUE) === FALSE)

{

    // file failed the XSS test

}

$this->security->sanitize_filename()

Page 103: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

사용자 입력에서 파일이름을 입력받을 경우 디렉토리 탐색이나 다른 보안문제를 해결하기 위해서 소독과정을 거치는것이 좋습니다.(손소독 아님 ㅎㅎ). sanitize_filename() 메서드를 이용하여 파일이름을 소독하세요. 예:

$filename = $this->security->sanitize_filename($this->input->post('filename'));

파일이름에 상대경로가 포함되는걸 허용할 경우 (예:file/in/some/approved/folder.txt) 두번째 파라미터$relative_path 를 TRUE로 설정하세요.

$filename = $this->security->sanitize_filename($this->input->post('filename'),

TRUE);

크로스 사이트 요청 위조 Cross-site request forgery (CSRF)

CSRF 보호를 활성화하려면 application/config/config.php 를 열고 다음과 같이 설정합니다:

$config['csrf_protection'] = TRUE;

폼헬퍼(form helper)의 form_open() 함수를 사용하면 폼의 CSRF 보호를위한 hidden 필드가 자동으로 삽입됩니다. 

User Agent ClassUser Agent 클래스의 함수들을 이용하시면 여러분의 사이트를 방문한사람이 브라우저인지, 모바일기기인지,로봇인지 구분하는 정보를 얻을 수 있습니다. 게다가, 참조 url 정보(referrer)와 언어 및 지원문자셋(character-set)정보도 얻을 수 있습니다.

클래스 초기화 Initializing the Class

다른 클래스들과 마찬가지로 User Agent 클래스도 컨트롤러에서 $this->load->library 함수를 통해 초기화 합니다:

$this->load->library('user_agent');

일단 로드되면 , $this->agent 으로 객체를 이용하실 수 있습니다.

User Agent 정의 User Agent Definitions

Page 104: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

user agent 이름은 설정파일에 정의되어있으며 application/config/user_agents.php 에 위치합니다. 필요하다면 아이템을 추가하실수도 있습니다.

예제 Example

User Agent 클래스가 초기화되면 , 사이트방문자가 브라우저인지, 모바일기기인지, 로봇인지에대한 확인을 시도합니다. 또한, 플렛폼 정보도 모읍니다.

$this->load->library('user_agent');

if ($this->agent->is_browser())

{

    $agent = $this->agent->browser().' '.$this->agent->version();

}

elseif ($this->agent->is_robot())

{

    $agent = $this->agent->robot();

}

Page 105: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

elseif ($this->agent->is_mobile())

{

    $agent = $this->agent->mobile();

}

else

{

    $agent = 'Unidentified User Agent';

}

echo $agent;

echo $this->agent->platform(); // 플렛폼정보 (Windows, Linux, Mac, etc.)

Page 106: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

함수 참조 Function Reference

$this->agent->is_browser()

user agent 가 알려진 웹브라우저인지 여부에 따라 TRUE/FALSE 를 리턴합니다.

if ($this->agent->is_browser('Safari'))

{

    echo 'You are using Safari.';

}

else if ($this->agent->is_browser())

{

    echo 'You are using a browser.';

}

주의:  이 예제에서 "Safari"라는 문자열은 브라우저 정의 목록 키 값입니다. 이 목록은 application/config/user_agents.php 에 정의되어 있으며 새 브라우저를 추가하거나 문자열을 변경할 수 있습니다.

$this->agent->is_mobile()

user agent 가 알려진 모바일기기인지 여부에 따라 TRUE/FALSE 를 리턴합니다.

Page 107: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

if ($this->agent->is_mobile('iphone'))

{

    $this->load->view('iphone/home');

}

else if ($this->agent->is_mobile())

{

    $this->load->view('mobile/home');

}

else

{

    $this->load->view('web/home');

}

$this->agent->is_robot()

Page 108: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

user agent 가 알려진 로봇인지 여부에 따라 TRUE/FALSE 를 리턴합니다.

참고:  user agent 라이브러리는 단지 가장많이 알려진 로봇정보만 가지고 있습니다. 완벽한 로봇목록이 아닙니다. 로봇은 수백종이 있으므로 각각을 모두 찾는것은 그다지 능률적이지 않습니다. 여러분의 사이트를 방문한 로봇이 리스트에 없다면 직접 application/config/user_agents.php 파일에 추가하실 수 있습니다.

$this->agent->is_referral()

user agent 가 다른 사이트에서 여러분의 사이트로 넘어왔는지 여부에 따라 TRUE/FALSE 를 리턴합니다.

$this->agent->browser()

여러분의 사이트를 보고있는 브라우저의 이름을 담은 문자열을 리턴합니다.

$this->agent->version()

여러분의 사이트를 보고있는 브라우저의 버전번호를 리턴합니다.

$this->agent->mobile()

여러분의 사이트를 보고있는 모바일기기의 이름을 리턴합니다.

$this->agent->robot()

여러분의 사이트를 보고있는 로봇의 이름을 리턴합니다.

$this->agent->platform()

여러분의 사이트를 보고있는 컴퓨터의 플렛폼을 리턴합니다(Linux, Windows, OS X, 등.).

$this->agent->referrer()

user agent 가 다른사이트를 통해 여러분의 사이트를 방문했다면 그 사이트를 리턴합니다. 일반적으로 다음코드를 통해 테스트할수 있습니다:

if ($this->agent->is_referral())

Page 109: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

{

    echo $this->agent->referrer();

}

$this->agent->agent_string()

전체 user agent 문자열을 리턴합니다. 일반적으로 아래와같습니다:

Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2

$this->agent->accept_lang()

user agent 가 특정언어를 허용(accept)하는지를 확인합니다. 예:

if ($this->agent->accept_lang('en'))

{

    echo 'You accept English!';

}

참고: 이 함수의 신뢰성은 그렇게 높지않습니다. 왜냐하면 몇몇 브라우저는 언어정보를 제공하지않고, 또한 제공한다해도 항상 정확하지는 않기 때문입니다.

$this->agent->accept_charset()

user agent 가 특정문자셋(character set)를 허용(accept)하는지를 확인합니다. 예:

Page 110: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

if ($this->agent->accept_charset('utf-8'))

{

    echo 'You browser supports UTF-8!';

}

참고: 이 함수의 신뢰성은 그렇게 높지않습니다. 왜냐하면 몇몇 브라우저는 문자셋정보를 제공하지않고, 또한 제공한다해도 항상 정확하지는 않기 때문입니다.

로더 Loader Class로더는 이름처럼 각 요소를 로드하는데 사용합니다. 요소는 라이브러리(클래스)일수도 있고 뷰파일, 헬퍼, 모델, 혹은 여러분이 만든파일일수도 있습니다.

참고: 이 클래스는 자동으로 초기화 됩니다.

아래함수들이 이 클래스에서 사용가능합니다:

$this->load->library('class_name', $config, 'object name')

이함수는 핵심( core)클래스를 로드하기위해서 사용합니다. class_name 은 로드하고자하는 클래스의 이름입니다. 참고: 우리는 "class" 와 "library" 교대로 사용합니다.

예를들어, 만약 CodeIgniter 를 이용하여 이메일을보내고자 한다면 , 먼저 컨트롤러에서 이메일 클래스를 로드합니다:

$this->load->library('email');

일단 로드되면, 라이브러리는 사용가능상태가 되고, $this->email->some_function(). 와 같이 사용합니다.

라이브러리파일은 "libraries" 폴더의 하위디렉토리에 저장될수 있으며, 여러분의 개인적인 application/libraries 폴더에 저장될수도 있습니다. 하위디렉토리에 저장된 파일을 로드하려면, "libraries"폴더로부터의 상대경로를 포함시키면 됩니다. 예를들어 , 다음위치에 파일이 있다면:

Page 111: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

libraries/flavors/chocolate.php

다음과 같이 로드합니다:

$this->load->library('flavors/chocolate');

여러분은 얼마든지 원하는만큼 깊이에 있는 하위디렉토리에서 파일을 불러올 수 있습니다.

또한 여러 개의 라이브러리를 한번에 로드하고자 한다면 배열을 넘겨주면 됩니다.

$this->load->library(array('email', 'table'));

옵션 설정 Setting options

두번째 파라미터는 선택적으로 설정정보를 넘겨줄 수 있습니다. 일반적으로 아래와 같이 배열을 넘겨줍니다:

$config = array (

                  'mailtype' => 'html',

                  'charset'  => 'utf-8,

                  'priority' => '1'

               );

$this->load->library('email', $config);

설정옵션은 통상 설정파일을 통해 설정할 수 있습니다. 각 라이브러리페이지에는 상세한 정보가 기술되어있으니 , 사용하고자하는 부분에대한정보는 그곳을 참고해주세요.

Page 112: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

주의: 첫번째 파라미터(로드할 라이브러리)로 배열을 넘겨주었다면, 각 라이브러리는 같은 설정정보를 받게 됩니다.

라이브러리를 다른 객체이름으로 할당하기 Assigning a Library to a different object name

세번째 파라미터가 비어있다면, 라이브러리는 통상 객체에 라이브러리와 같은 이름을 할당합니다. 예를들어, 라이브러리 이름이 Session 이라면 변수명을$this->session 로 할당합니다.

만약 다른클래스이름으로 사용하고싶다면 세번째 파라미터로 넘기시면 됩니다:

$this->load->library('session', '', 'my_session');

// Session class is now accessed using:

$this->my_session

첫번째 파라미터에 배열을 넘겨주었다면, 세번째 파라미터는 무시됩니다.

$this->load->view('file_name', $data, true/false)

이 함수는 뷰파일을 로드합니다. 만약 뷰(Views) 섹션을 읽지않으셨다면, 먼저 읽어주세요 . 이함수가 일반적으로 어떻게 쓰이는지 알 수 있습니다.

첫번째 파라미터는 꼭 필요합니다 . 로드하고자하는 뷰파일의 이름이기 때문입니다. 참고: .php 가 아닌 다른 파일을 사용하는경우가 아니라면 .php 를 적어주실필요가 없습니다.

선택적으로 사용하는 두번째 파라미터는 연관배열이나, 객체를 입력받으며,PHP extract 함수를 이용하여 뷰파일에서 사용가능한 변수로 변환합니다.

선택적으로 사용하는 세번째 파라미터는 함수의 기능을 변경하여 문자열을 브라우저로 보내는대신 리턴하게 합니다. 특정한 방법으로 데이터를 처리하고자하는 경우 유용합니다.

Page 113: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

파라미터를 true 로 설정하면 데이터를 리턴합니다. 기본설정은 false 이며 데이터를 브라우저로 전송합니다. 데이터를 리턴받을때는 아래와같이 변수에 할당해야합니다:

$string = $this->load->view('myfile', '', true);

$this->load->model('Model_name');

$this->load->model('Model_name');

모델이 하위디렉토리에 존재한다면 모델폴더로부터의 상대경로를 적어주세요. 예를들어, 모델이 application/models/blog/queries.php 에 있다면 ,다음과같이 합니다:

$this->load->model('blog/queries');

모델에 다른 객체이름을 할당하고싶다면 두번째 파라미터로 넘겨주시면 됩니다:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

$this->load->database('options', true/false)

이함수는 데이터베이스 클래스를 로드합니다. 두개의 파라미터는 선택적(optional)으로 사용합니다. 더 자세한정보는 데이터베이스(database) 섹션을 참고하세요.

$this->load->vars($array)

이 함수는 연관배열을 입력받아 PHP extract 함수를 통해 변수를 생성합니다. 이 함수는 위의 $this->load->view() 함수에서 두번째 파라미터를 사용한 경우와 같은 결과를 보여줍니다. 만약 컨트롤러의 생성자에서 전역변수를 설정하여 모든함수에서 로드한 뷰에 모두 사용할수 있도록 하려면 이함수를 사용합니다. 이함수를 여러번 호출할 수도 있습니다. 데이터는 캐시되고 합쳐져서 하나의 배열이 된 다음 변수로 변환됩니다.

$this->load->get_var($key)

Page 114: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

뷰에서 사용가능한 연관배열을 체크합니다. 어떤 변수가 라이브러리나 컨트롤러에서 $this->load->vars()를 통해 설정된 경우 유용합니다.

$this->load->helper('file_name')

이함수는 헬퍼를 로드합니다.file_name 은 _helper.php 를 제외한 파일이름 입니다.

$this->load->file('filepath/filename', true/false)

이 함수는 일반적인 파일 로딩 함수입니다. 첫번째 파라미터로 파일경로와 이름을 입력하면 해당파일을 연다음 읽습니다. 기본값으로 , 뷰파일처럼 데이터를 브라우저로 보냅니다. 두번째 파라미터를 true 로 설정하면 데이터를 문자열로 리턴합니다.

$this->load->language('file_name')

이함수는 언어로딩함수(language loading function)의 별칭( alias) 입니다 :$this->lang->load()

$this->load->config('file_name')

이함수는 설정로딩함수(config file loading function)의 별칭( alias) 입니다: $this->config->load()

응용 프로그램 패키지

An application package allows for the easy distribution of complete sets of resources in a single directory, complete with its own libraries, models, helpers, config, and language files. It is recommended that these packages be placed in the application/third_party folder. Below is a sample map of an package directory

예제:"Foo Bar" 프로그램의 디렉토리 구성

아래는 "Foo Bar" 프로그램의 디렉토리 구성 예입니다.

/application/third_party/foo_bar

Page 115: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

config/

helpers/

language/

libraries/

models/

"Foo Bar"가 어떤 프로그램이든 간에 설정파일(config files), 헬퍼(helpers), 언어(language files), 라이브러리(libraries),모델(models)을 포함하고 있습니다. 이런 리소스들을 컨트롤러에서 사용하려면 로더에게 리소스를 패키지에서 불러올것이라고 알려줘야합니다. 알려주기 위해서는 패키지 경로를 추가 해주면 됩니다.

$this->load->add_package_path()

패키지 경로를 추가해 주면, 로더 클래스는 리소스에 대한 요청이 있을때 추가된 경로를 그 앞에 붙여줍니다.예를 들어, "Foo Bar" 프로그램 패키지는 Foo_bar.php 라는 라이브러리를 가지고 있습니다.컨트롤러에서는 아래와 같이 합니다:

$this->load->add_package_path(APPPATH.'third_party/foo_bar/');

$this->load->library('foo_bar');

$this->load->remove_package_path()

컨트롤러가 패키지에 있는 리소스를 더이상 사용할 필요가 없으면 패키지 경로를 제거할 수 있습니다. 패키지경로가 제거되면, 로더는 더이상 그 경로에서 리소스를 찾지 않습니다. 맨 마지막에 추가된 경로를 제거하려면 파라미터없이 이 함수를 호출해 주면 됩니다.

$this->load->remove_package_path()

특정 경로를 제거하려면 add_package_path() 에서 설정한 경로와 같은 값을 파라미터로 넘겨주세요.

Page 116: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');

패키지 뷰 파일(Package view files)

기본값으로, 패키지 뷰 파일경로는 add_package_path() 가 호출될때 설정됩니다.뷰파일이 로드될 때는 설정된 뷰 경로에서 루프를 돌면서 첫번째로 일치하는 뷰파일이 로드됩니다.

이런경우, 패키지 내에서 뷰파일 이름이 충돌 하여, 잘못된 패키지가 로드될 가능성이 있습니다.그럴 가능성을 없애기 위해서 add_package_path() 를 호출할 때 두번째 파라미터를 FALSE 로 설정하세요.

$this->load->add_package_path(APPPATH.'my_app', TRUE);

$this->load->view('my_app_index'); // 로드됨

$this->load->view('welcome_message'); //두번째 파라미터가 TRUE 이므로 기본

welcome_message

b/c 가 로드 되지않습니다.

// 리셋

$this->load->remove_package_path(APPPATH.'my_app');

// 두번째 파라미터가 없는경우

Page 117: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->add_package_path(APPPATH.'my_app', TRUE);

$this->load->view('my_app_index'); // 로드됨

$this->load->view('welcome_message'); // 로드됨

파일 업로드 File Uploading ClassCodeIgniter 의 파일 업로딩 클래스는 파일을 업로드 할 수 있도록 해줍니다.다양한 설정옵션이 있으며 , 파일타입이나 크기등을 제한할 수 있습니다.

절차 The Process

파일을 업로드하는 과정은 다음의 일반적차를 따릅니다:

업로드 폼이 표시되고 사용자는 업로드할 파일을 선택합니다. 폼이 전송(submit)되면 ,파일은 여러분이 정의한 위치에 업로드 됩니다. 이때, 여러분이 선택한 옵션에 따라 파일이 업로드 허용된 된것인지 여부를 검사(validate)

합니다. 일단 업로드 되면 사용자에게 성공적으로 업로드 되었다는 메세지를 보여줍니다.

이 과정을 보여주기 위하여 간단한 튜토리얼을 보여드립니다. 그리고 그 아래 참조가이드를 제공합니다.

업로드 폼 생성 Creating the Upload Form

텍스트에디터를 사용하여 upload_form.php 이라는 폼을 파일을 생성합니다. 그리고 아래 코드를 삽입한후 applications/views/ 폴더 아래 저장합니다:

Page 118: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위코드를 보시면 form 헬퍼를 사용하여 여는 form 태그대신 사용한것을 알수 있습니다. 파일업로드는 multipart form 을 필요로 하므로 헬퍼는 적당한 태그를 자동으로 작성해줍니다. 그리고 $error 변수가 있다는것을 알수 있으실 것입니다. 이 변수는 사용자의 실수에 대해서 에러메세지를 보여줍니다.

성공 페이지 The Success Page

텍스트 에디터를 이용하여 upload_success.php 파일을 작성합니다. 그리고 그 안에 아래 코드를 삽입한후 applications/views/ 폴더 아래 저장합니다:

컨트롤러 The Controller

<html><head><title>Upload Form</title></head><body><?php echo $error;?><?php echo form_open_multipart('upload/do_upload');?<input type="file" name="userfile" size="20" /><br /><br /><input type="submit" value="upload" /></form></body></html>

<html><head><title>Upload Form</title></head><body><h3>Your file was successfully uploaded!</h3><ul><?php foreach($upload_data as $item => $value):?><li><?php echo $item;?>: <?php echo $value;?></li><?php endforeach; ?></ul><p><?php echo anchor('upload', 'Upload Another File!</body></html>

Page 119: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

텍스트 에디터를 이용하여 upload.php 라는 이름의 컨트롤러 파일을 작성한후 아래의 코드를 삽입하고 applications/controllers/ 폴더 아래 저장합니다.:

업로드 폴더 The Upload Folder

업로드 한 이미지를 저장할 대상폴더가 필요합니다.CodeIgniter 가 설치된 루트폴더에 uploads 라는폴더를 생성하고 권한을 777 로 합니다.

시험해보세요! Try it!

작성한 폼을 테스트하기위해 아래와 유사한 경로로 접근합니다:

example.com/index.php/upload/

<?phpclass Upload extends CI_Controller {

function __construct(){

parent::__construct();$this->load->helper(array('form', 'url')

}function index(){

$this->load->view('upload_form', arra}function do_upload(){

$config['upload_path'] = './uploads/ ';$config['allowed_types'] = 'gif|jpg|png$config['max_size'] = '100';$config['max_width'] = '1024';$config['max_height'] = '768';$this->load->library('upload', $configif ( ! $this->upload->do_upload()){

$error = array('error' => $this$this->load->view('upload_fo

}else{

$data = array('upload_data' $this->load->view('upload_s

}}

}?>

Page 120: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

업로드 폼을 보실수 있으실겁니다. 이미지 파일( jpg, gif, png 등)업로드를 시도해보세요 .컨트롤러의 경로가 올바르다면 제대로 작동하는것을 확인하실 수 있습니다. 

참조 가이드 Reference Guide

업로드 클래스 초기화 Initializing the Upload Class

CodeIgniter 의 다른 클래스들과 마찬가지로 ,컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:

$this->load->library('upload');

업로드 클래스가 로드되면 , $this->upload 과 같이 업로드 객체를 사용하실 수 있습니다.

설정하기 Setting Preferences

다른 라이브러리들과 마찬가지로 , 어떤 파일이 업로드 허용될지 설정할 수 있습니다.위에서 만든 컨트롤러에서 아래의 설정을 추가해보세요 :

$config['upload_path'] = './uploads/';

$config['allowed_types'] = 'gif|jpg|png';

$config['max_size'] = '100';

$config['max_width'] = '1024';

$config['max_height'] = '768';

Page 121: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->library('upload', $config);

// Alternately you can set preferences by calling the initialize function. Useful if you auto-load

the class:

$this->upload->initialize($config);

위 설정은 대부분 무엇을 뜻하는지 직관적으로 알수 있으실겁니다. 아래 테이블은 가능한 설정들을 보여줍니다.

설정들 Preferences

아래의 설정들이 사용가능합니다.설정을 명시하지않을경우 사용될 기본값들도 확인하세요 .

설정 기본값 옵션 설명

upload_path None None 업로드 파일이 위치할 폴더경로 .폴더는 쓰기 가능해야하며 경로는 절대경로 혹은 상대경로를 사용합니다.

allowed_types None None업로드를 허용할 파일의 마임타입(mime types)을 설정합니다. 보통 파일 확장자는 마임타입으로 사용될수 있습니다. 멀티플타입은 파이프를 이용하여 구분합니다.

overwrite FALSE TRUE/FALSE (boolean)

true 로 설정된 상태에서, 같은 이름의 파일이 이미 존재한다면 덮어쓸것입니다. false 로 설정되어있으면, 파일명에 숫자가 추가로 붙게됩니다.

max_size 0 None업로드 파일의 최대크기(KB)를 지정합니다. 0 으로 설정하면 크기 제한이 없게됩니다.대부분의 PHP 는 php.ini 파일에 업로드 파일 크기 설정이 이미 되어있습니다.일반적으로 2 MB ( 2048 KB)가 기본입니다.

max_width 0 None 업로드 파일의 최대 너비(픽셀단위) 를 설정합니다. 0 이면 제한이 없습니다.

max_height 0 None 업로드 파일의 최대 높이(픽셀단위)를 설정합니다. 0 이면 제한이 없습니다.

max_filename 0 None 파일이름의 최대길이를 지정합니다.0 이면 제한이 없습니다..

encrypt_name FALSE TRUE/FALSE (boolean)

TRUE 로 설정하면 파일이름은 랜덤하게 암호화된 문자열로 변합니다. 파일을 업로드한 사람이 파일명을 알수 없도록할때 유용합니다.

Page 122: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

remove_spaces TRUE TRUE/FALSE (boolean)

TRUE 로 설정하면 파일명에 공백이 있을경우 밑줄(_)로 변경됩니다.이 옵션은 사용을 권장합니다.

설정파일에서 설정하기 Setting preferences in a config file

위 설정들을 컨트롤러대신 설정파일에서 할수도 있습니다. 먼저 upload.php 파일을 생성한후 $config 배열을 그 안에 만듧니다. 그런다음 그 파일을 config/upload.php 로 저장하면 자동으로 설정이 적용될것입니다. 그려면 $this->upload->initialize 함수를 사용할 필요가 없습니다.

함수들 Function Reference

아래 함수들이 사용가능합니다.

$this->upload->do_upload()

여러분의 설정에 따라 업로드를 수행합니다.참고: 기본설정은 파일이 userfile 라는 폼필드로부터 업로드 될것이라고 기대합니다.또한 폼은 multipart 타입이라야 합니다.:

<form method="post" action="some_action" enctype="multipart/form-data" />

필드명을 여러분이 저장하고싶다면 do_upload 함수에 아래와같이 그 이름을 파라미터로 넘겨주시면 됩니다.:

$field_name = "some_field_name";

$this->upload->do_upload($field_name)

$this->upload->display_errors()

do_upload() 함수가 실패했을때 에러메시지를 추출해줍니다. 이 함수는 자동으로 echo 까지 수행해주지는 않습니다. 단지 데이터만 전달해줄뿐이므로 그 후처리는 여러분이 원하는대로 할 수 있습니다..

에러메세지 포멧설정 Formatting Errors

기본으로 위함수는 에러를 <p> 태그들로 감쌉니다. 여러분은 아래와같은 방법으로 다른 구분자를 설정할 수 있습니다.:

Page 123: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->upload->display_errors('<p>', '</p>');

$this->upload->data()

업로드한 파일에 관련된 모든 데이터를 배열의 형태로 리턴해주는 헬퍼 함수 입니다.다음 프로토타입을 참조하세요 :

Array

(

    [file_name]    => mypic.jpg

    [file_type]    => image/jpeg

    [file_path]    => /path/to/your/upload/

    [full_path]    => /path/to/your/upload/jpg.jpg

    [raw_name]     => mypic

    [orig_name]    => mypic.jpg

    [file_ext]     => .jpg

    [file_size]    => 22.2

Page 124: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    [is_image]     => 1

    [image_width]  => 800

    [image_height] => 600

    [image_type]   => jpeg

    [image_size_str] => width="800" height="200"

)

설명 Explanation

위 배열 아이템에대한 설명입니다..

아이템 설명

file_name 업로드한 파일이름입니다. 확장자까지 포함합니다.

file_type 파일의 마임타입(Mime type)입니다.

file_path 파일의 서버상 절대경로입니다.

full_path 파일이름까지 포함한 서버상의 절대경로입니다.

raw_name 확장자 없는 파일명입니다.

orig_name 원래파일 이름입니다. 파일이름을 암호화 하는 옵션을 사용한경우에만 유용합니다.

file_ext 점을 포함한 파일 확장자입니다.

file_size 킬로바이트(KB)로 표시된 파일 크기입니다.

is_image 파일이 이미지인지 아닌지를 나타냅니다. 1 = 이미지. 0 = 이미지아님.

image_width 이미지 너비.

image_heigth 이미지 높이.

image_type 이미지 타입. 일반적으로 점이 없는 파일 확장자 입니다.

image_size_str 이미지의 너비와 높이를 포함하는 문자열입니다. 이미지 태그에 삽입할때 유용합니다.

Page 125: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

입력클래스 Input Class입력클래스는 두가지 목적으로 사용됩니다:

1. 보안을 위해서 전역(global) 입력 데이터를 전처리 합니다.2. 입력클래스는 입력데이터를 가져오거나, 가져온 데이터를 전처리하는 헬퍼함수를

제공합니다.

참고: 이 클래스는 시스템에 의해 자동으로 초기화 되므로 여러분이 초기화 하실 필요가 없습니다.

보안 필터링 Security Filtering

새 컨트롤러가 호출되면 보안필터링 함수는 자동으로 호출됩니다. 필터링은 다음 작업을 수행합니다:

$config['allow_get_array'] 를 FALSE 로 설정할경우(기본값 TRUE)전역(global) GET 배열을 삭제합니다..

만약 register_globals 가 on 되어 있는 경우라면 모든 전역(global)변수들을 삭제합니다. GET/POST/COOKIE 배열의 키들을 필터링하여 영문자나 숫자만(그리고 다른것도 약간) 허용합니다.

XSS (Cross-site Scripting Hacks) 필터링을 제공합니다. 이는 전역적으로 활성화 될수도 있고, 요청에 따라 활성화 될수도 있습니다.

줄바꿈 문자를 \n 로 표준화 합니다 (윈도우의 경우 \r\n)

XSS Filtering

입력 클래스는 크로스 사이트 스크립팅 공격을 방지하기 위해 자동으로 입력 값을 필터링하는 기능이 있습니다.application/config/config.php 파일을 다음과 같이 설정하여 POST 또는 COOKIE 데이터를 처리할 때 자동으로 필터를 실행할 수 있습니다 :

$config['global_xss_filtering'] = TRUE;

응용 프로그램에서 XSS 필터링을 사용하는 방법은 보안클래스를 참조하십시오.

POST, COOKIE, 혹은 SERVER 데이터 사용하기

CodeIgniter 는 POST, COOKIE 혹은 SERVER 아이템을 가져오기 위해서 3 가지 헬퍼함수를 제공합니다. 각 아이템들을 직접가져오는것보다($_POST['something']) 헬퍼를 사용하면 더 좋은 이유는 ,헬퍼가 아이템이 세팅되어있는지를 먼저체크하고 세팅되어있지않다면 false 를

Page 126: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

반환하기 때문입니다. 아이템이 존재하는지 먼저 검사하고 처리할 필요가 없어집니다. 다시말하면 , 일반적으로 여러분안 아래와 같이 프로그램할 것입니다.:

if ( ! isset($_POST['something']))

{

    $something = FALSE;

}

else

{

    $something = $_POST['something'];

}

CodeIgniter 에서는 아래와 같이 간단하게 위의 기능을 수행할 수 있는것이죠:

$something = $this->input->post('something');

세가지함수는 아래와 같습니다: $this->input->post() $this->input->cookie() $this->input->server()

$this->input->post()

첫번째 파라미터는 POST 아이템의 이름(name)이 들어갑니다:

Page 127: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->input->post('some_data');

찾고자하는 아이템이 존재하지않으면 함수는 FALSE 를 리턴합니다.

선택적으로 사용하는 두번째 파라미터는 데이터를 XSS 필터링 되게 합니다. 두번재 파라미터를 TRUE 로 하시면 됩니다;

$this->input->post('some_data', TRUE);

파라미터를 지정하지 않고 호출하면 POST 로 넘어오는 모든 값을 연관 배열로 리턴합니다.

첫 번째 파라미터를 NULL 로 하고, 두번째 인수에 부울(boolean)값을 넘겨주면,부울값에 따라모든 POST 값에 XSS 필터를 적용하거나,하지 않을 수 있습니다.

POST 입력값이 없으면 FALSE 를 리턴합니다.

$this->input->post(NULL, TRUE); // returns all POST items with XSS filter

$this->input->post(); // returns all POST items without XSS filter

$this->input->get()

이함수는 get 데이터를 가져온다는 점만 빼면 post 함수와 동일합니다:

$this->input->get('some_data', TRUE);

파라미터를 지정하지 않고 호출하면 GET 으로 넘어오는 모든 값을 연관 배열로 리턴합니다.

첫 번째 파라미터를 NULL 로 하고, 두번째 인수에 부울(boolean)값을 넘겨주면,부울값에 따라모든 GET 값에 XSS 필터를 적용하거나,하지 않을 수 있습니다.

GET 입력값이 없으면 FALSE 를 리턴합니다.

$this->input->get(NULL, TRUE); // returns all GET items with XSS filter

Page 128: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->input->get(); // returns all GET items without XSS filtering

$this->input->get_post()

이함수는 post 와 get 을 모두 뒤져서 데이터를 가져옵니다 . post 를 먼저찾고 그다음 get 을 찾습니다:

$this->input->get_post('some_data', TRUE);

$this->input->cookie()

이함수는 쿠키에서 데이터를 가져온다는점을 배면 post 함수와 동일합니다:

$this->input->cookie('some_data', TRUE);

$this->input->server()

이함수는 server 변수들 에서 데이터를 가져온다는점을 빼면 위 함수와 동일합니다:

$this->input->server('some_data');

$this->input->set_cookie()

쿠키를 생성합니다. 이 메서드를 이용해서 쿠키를 생성하는데는 두가지 방법이 있습니다. 하나는 배열을 넘겨주는것이고 다른 하나는 개별변수를 넘겨주는것입니다. 

배열을 이용하는 방법

연관배열을 첫번째 파라미터로 넘겨주면 됩니다.:

$cookie = array(

Page 129: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    'name'   => 'The Cookie Name',

    'value'  => 'The Value',

    'expire' => '86500',

    'domain' => '.some-domain.com',

    'path'   => '/',

    'prefix' => 'myprefix_',

    'secure' => TRUE

);

$this->input->set_cookie($cookie);

주의:

이름(name)과 값(value) 만을 사용해야 합니다. 쿠키를 삭제하려면 만료시간(expire)에 공백을 넣습니다.

만료시간은 초 단위이며, 현재시간 + 지정한 만료시간으로 설정될 것입니다.개발자는 현재시간을 고려할 필요없이 지금으로 부터 몇초후에 쿠키가 만료될지만 지정하시면 됩니다 .만료시간을 0 으로 하면 브라우저가 열려있는동안에만 쿠키가 살아있습니다.

Page 130: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

사이트 요청방법에 상관없이 전체 사이트에 적용할 쿠키는 domain 항목에 점으로 시작하는 사이트주소를 적으시면 됩니다

예: .your-domain.com

보통 패스(path)부분은 신경쓸 필요가 없습니다. 메서드가 루트패스를 알아서 설정합니다.

서버의 다른 쿠키와 이름이 같을 가능성이 있을 경우에만, 접두어(prefix)를 설정하세요.

보안 부울 값은 보안 쿠키를 사용하려는 경우에만 TRUE 로해야합니다.

개별 매개 변수를 전달하는 방법

아래와 같이 각각 전달합니다:

$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);

$this->input->cookie()

쿠키를 읽어옵니다. 첫번째 파라미터는 읽을 쿠키의 이름이며, 접두어가 있는경우 접두어도 같이 적어주세요:

cookie('some_cookie');

읽으려고하면 쿠키가 존재하지 않으면 FALSE (Boolean)을 리턴합니다.

옵션인 두번째 파라미터는 데이터에 XSS 필터링을 적용할지를 결정합니다. 두번째 파라미터가 TRUE 일 경우 적용됩니다;

cookie('some_cookie', TRUE);

$this->input->ip_address()

현재사용자의 IP 주소를 리턴합니다. IP 주소가 유효하지 않다면 함수는 0.0.0.0 을 리턴합니다

echo $this->input->ip_address();

$this->input->valid_ip($ip)

IP 주소를 받아서 주소가 유효한지 아닌지에 따라서 TRUE 나 FALSE 를 리턴합니다. 참고: The $this->input->ip_address() 함수는 자동으로 ip 유효성을검사합니다.

Page 131: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

if ( ! $this->input->valid_ip($ip))

{

     echo 'Not Valid';

}

else

{

     echo 'Valid';

}

$this->input->user_agent()

현재 사용자의 user agent (web browser) 를 리턴합니다. 유효한 값이 없을때는 FALSE 를 리턴합니다.

echo $this->input->user_agent();

See the User Agent Class for methods which extract information from the user agent string.

$this->input->request_headers()

Apache 이외 (apache_request_headers() 를 지원하지 않는) 환경에서 유용합니다. 헤더의 배열을 반환합니다.

Page 132: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$headers = $this->input->request_headers();

$this->input->get_request_header();

요청 헤더의 배열에서 지정한 요소를 반환합니다.

$this->input->get_request_header('some-header', TRUE);

$this->input->is_ajax_request()

서버 헤더에 HTTP_X_REQUESTED_WITH 가 설정되어 있는지 확인하고 결과를 부울(TRUE,FALSE)로 반환합니다. 

$this->input->is_cli_request()

STDIN 상수가 설정되어 있는지 확인합니다. PHP 가 커맨드 라인에서 실행되고 있는지 확인하는 안전한 방법입니다. 

$this->input->is_cli_request()

FTP 클래스

CodeIgniter 의 FTP 클래스를 이용하면 원격서버에 파일을 전송할 수 있습니다. 원격지 파일들을 이동하거나, 이름변경 혹은 삭제도 가능하구요 . FTP 클래스는 미러링(mirroring) 함수도 제공합니다. 미러링 함수는 FTP 를 이용하여 로컬 폴더의 복사본을 원격지에 만듦니다.

주의:  SFTP 와 SSL FTP 은 지원하지 않습니다. 표준 FTP 만 지원 합니다.

클래스 초기화 Initializing the Class

CodeIgniter 에서 제공하는 다른 클래스들과 같이 , FTP 클래스도 컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:

$this->load->library('ftp');

한번 로드되면 , FTP객체는 $this->ftp 와 같이 사용합니다.

Page 133: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

사용예제 Usage Examples

본 예제에서는 FTP 연결을 열고 로컬파일을 읽은다음 ASCII 모드로 업로드 합니다. 이때 파일 퍼미션은 755 로 설정합니다.

$this->load->library('ftp');

$config['hostname'] = 'ftp.example.com';

$config['username'] = 'your-username';

$config['password'] = 'your-password';

$config['debug'] = TRUE;

$this->ftp->connect($config);

$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);

Page 134: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->ftp->close();

본 예제에서는 서버에서 파일목록을 추출해 냅니다.

$this->load->library('ftp');

$config['hostname'] = 'ftp.example.com';

$config['username'] = 'your-username';

$config['password'] = 'your-password';

$config['debug'] = TRUE;

$this->ftp->connect($config);

$list = $this->ftp->list_files('/public_html/');

Page 135: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

print_r($list);

$this->ftp->close();

본 예제에서는 로컬 디렉토리를 서버에 미러링(똑같이 생성)합니다.

$this->load->library('ftp');

$config['hostname'] = 'ftp.example.com';

$config['username'] = 'your-username';

$config['password'] = 'your-password';

$config['debug'] = TRUE;

Page 136: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->ftp->connect($config);

$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');

$this->ftp->close();

함수 레퍼런스 Function Reference

$this->ftp->connect()

FTP 에 연결하여 로그온합니다. 연결정보는 배열로 함수에 전달하거나, 설정파일에 저장할 수 있습니다.

아래 예제는 연결정보를 직접 설정하는법을 보여줍니다:

$this->load->library('ftp');

$config['hostname'] = 'ftp.example.com';

$config['username'] = 'your-username';

Page 137: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$config['password'] = 'your-password';

$config['port']     = 21;

$config['passive']  = FALSE;

$config['debug']    = TRUE;

$this->ftp->connect($config);

FTP 연결정보를 설정파일에 저장하기 Setting FTP Preferences in a Config File

ftp.php 파일을 만든후 $config 배열을 그 파일안에 추가합니다. 그 다음에 config/ftp.php 로 저장하면 자동으로 설정을 읽어오게 됩니다.

사용가능한 연결 옵션:

hostname - FTP 호스트 이름. 일반적으로 ftp.example.com 등과 같습니다. username - 사용자 명. password - 암호. port - 접속포트. 21 이 기본값 입니다. debug - TRUE/FALSE (불린). 에러메세지를 표시하기 위해 디버깅을 활성화 시킬지

안시킬지 설정. passive - TRUE/FALSE (불린). 패시브모드(passive mode)로 할것인지 여부설정.

기본값은 패시브모드 활성상태 입니다.

$this->ftp->upload()

파일을 서버에 업로드 합니다. 이때 반드시 로컬경로와 서버경로를 넘겨주어야합니다. 필요하다면 모드 및 퍼미션을 설정할수도 있습니다. 예 :

Page 138: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);

모드옵션은 :  ascii, binary, 그리고 auto (기본값). 만약 auto 로 설정되어있다면 업로드할 파일의 확장자를 기준으로 모드를 설정합니다.

퍼미션 설정은 8진수를 이용하여 4번째 파라미터로 설정하면 됩니다.

$this->ftp->download()

서버에서 파일을 다운로드합니다. 원격 및 로컬 경로를 지정해야합니다. 옵션으로 모드를 지정할 수도 있습니다. 예 :

$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');

옵션으로 지정할 수 있는 모드:  ascii, binary, auto (기본값). auto 는 소스파일의 확장자를 통해 모드를 자동설정합니다.

다운로드에 실패한 경우 FALSE 를 반환합니다. (로컬 파일에 쓰기 권한이없는 경우 포함)

$this->ftp->rename()

파일이름을 바꿉니다. 원래 파일경로 및 새로운파일 경로를 파라미터로 넘겨야 합니다.

// Renames green.html to blue.html

$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');

$this->ftp->move()

파일을 이동합니다. 소스(source)와 목적지경로(destination)를 넘겨줍니다.:

// Moves blog.html from "joe" to "fred"

$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');

Page 139: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

참고: 만약 목적지 경로에서 넘겨지는 파일이름이 소스와 다르다면 파일명 변경도 같이 이루어 집니다.

$this->ftp->delete_file()

파일을 삭제합니다. 지울 파일의 경로를 넘겨줍니다.

$this->ftp->delete_file('/public_html/joe/blog.html');

$this->ftp->delete_dir()

디렉토리를 지웁니다. 이때 디렉토리가 포함하고있는 모든것을 같이 지웁니다. 지울 디렉토리를 넘겨줍니다. 이때 마지막에 / 를 붙여야합니다.

중요 :  이함수를 사용하실때는 매우 주의하셔야 합니다. 디렉토리를 삭제할때 하위디렉토리까지 모두 재귀적으로 삭제합니다.그러므로 넘겨주는 경로가 잘못된 경로가 아닌지 확실하게 확인해야 합니다.list_files() 함수를 통해서 경로가 옳은지 먼저 확인하시는것이 좋습니다.

$this->ftp->delete_dir('/public_html/path/to/folder/');

$this->ftp->list_files()

서버에서 파일목록을 추출하여 배열로 리턴합니다. 원하는 디렉토리의 경로를 넘겨줍니다.

$list = $this->ftp->list_files('/public_html/');

print_r($list);

Page 140: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->ftp->mirror()

로컬 폴더의 포함내용 전부를 재귀적으로 읽은후 서버에 동일한 폴더를 생성합니다. 어떤 디렉토리 구조라도 서버에서 다시 생성됩니다. 파라미터로 소스경로와 목적지 경로를 넘겨줍니다:

$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');

$this->ftp->mkdir()

서버에 디렉토리를 생성합니다 . 생성하고자하는 폴더의 경로를 넘겨줍니다. 이때 마지막에 / 를 붙여줍니다.퍼미션은 8진수를 사용할수도 있으며 두번째 파라미터로 넘겨줍니다

// Creates a folder named "bar"

$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);

$this->ftp->chmod()

파일 퍼미션을 설정합니다. 퍼미션을 적용하고자하는 파일이나 폴더경로를 넘겨줍니다:

// Chmod "bar" to 777

$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);

$this->ftp->close();

Page 141: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

연결을 끊습니다. 업로드가 끝났을때 이 함수를 사용하는것이 좋습니다.

페이지네이션 Pagination ClassCodeIgniter 의 페이지네이션 클래스는 매우 사용하기 쉽답니다. 100% 커스터마이징 가능합니다. 커스터마이징은 동적으로 할수도 있고, 설정을 저장할수도 있습니다.

"페이지네이션" 이라는 말에 익숙하지 않으신가요 ? 바로 아래와같이 페이지 이동을위한 링크를 뜻하는 말이랍니다:

« First  < 1 2 3 4 5 >  Last »

예제 Example

컨트롤러 함수내에서 어떻게 페이지를 생성하는지 보여주는 예제입니다:

$this->load->library('pagination');

$config['base_url'] = 'http://example.com/index.php/test/page/';

$config['total_rows'] = 200;

$config['per_page'] = 20;

$this->pagination->initialize($config);

Page 142: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

echo $this->pagination->create_links();

참고:

$config 배열에는 설정값들이 들어갑니다. 위와 같이 그배열을 $this->pagination->initialize 함수에 넘겨줍니다. 20 개정도의 설정 아이템들이 있지만, 위에서 보여준것은 그중에서 반드시 필요한 세가지 입니다. 아래는 각 아이템에대한 설명입니다:

base_url 페이지네이션에 포함될 컨트롤러/함수 의 전체 url 입니다.위의 예제에서,컨트롤러는"Test" 이고 함수는 "page" 입니다. url 을 다른 구조로 하고싶다면 url 라우팅 변경(re-route your URI) 을 이용하실수 있습니다.

total_rows 페이지네이션할 전체 레코드의 수를 나타냅니다. 통상적이로 이숫자는 데이터베이스 쿼리에서 리턴되는 전체열수 입니다.

per_page 한페이지에 보여질 아이템(열)수 입니다.위의 예제에서는 20 개의 아이템이 한페이지에 보여집니다.

보여줄 페이지네이션이 없을경우 create_links() 함수는 빈 문자열을 리턴합니다.

설정을 설정파일에 저장하기 Setting preferences in a config file

설정을 위처럼 하지않고, 설정파일에 저장할수도 있습니다.pagination.php 파일을 만든후 $config 배열을 추가하세요. 그런후 파일을 config/pagination.php 에 저장하시면, 자동으로 불러지게 됩니다.설정파일로 저장하면 $this->pagination->initialize 함수를 호출할 필요가 없습니다.

페이지네이션 커스터마이징 하기 Customizing the Pagination

아래는 페이지네이션이 어떻게 보여질지에 대한 설정(preferences) 목록입니다.

$config['uri_segment'] = 3;

페이지네이션 함수는 페이지 번호를 URI 세그먼트의 어느부분에 포함시킬지 자동으로 결정합니다. 여러분이 직접 지정하고싶으면 위 설정을 사용합니다.

$config['num_links'] = 2;

선택된 페이지번호 좌우로 몇개의 숫자링크를 보여줄지 설정합니다. 예를들어, 2 는 본 페이지의 맨위에있는 예제와 같이 양쪽에 2 개의 숫자링크를 보여줍니다.(즉 숫자는 5 개가 되겠죠 )

$config['use_page_numbers'] = TRUE;

Page 143: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

기본값으로, URI 세그먼트는 페이징하는 아이템들의 시작 인덱스를 사용합니다.(역주:무슨소리인지 잘 모르겠네요.사용해 보면 아는데 시간이 없어서 ... 죄송).실제 페이지 번호를 보여주고 싶다면, TRUE 로 설정하세요.

$config['page_query_string'] = TRUE

기본값으로, 페이지네이션 라이브러리는 여러분이 URI 세그먼트(Segments)를 사용한다고 가정합니다. 그리고 링크를 아래처럼 생성합니다.

http://example.com/index.php/test/page/20

$config['enable_query_strings'] 을 TRUE 로 설정하면, 링크는 자동으로 쿼리스트링(Query Strings) 형식으로 바뀝니다. 이 옵션은 명시적으로 설정할수도 있습니다. $config['page_query_string'] 이 TRUE 일때 페이지네이션 링크는 아래처럼 바뀝니다.

http://example.com/index.php?c=test&m=page&per_page=20

"per_page"는 기본적으로 전달되는 쿼리스트링입니다. 그러나 $config['query_string_segment'] = 'your_string' 를 통해서 여러분이 설정할수도 있습니다.

감싸는 태그 추가하기 Adding Enclosing Markup

페이지네이션 전체에 감싸는 태그를 추가하고싶으면 아래와 같이 합니다:

$config['full_tag_open'] = '<p>';

페이지네이션 왼쪽에 위치할 여는태그입니다.

$config['full_tag_close'] = '</p>';

페이지네이션 오른쪽에 위치할 닫는태그 입니다.

"처음으로"링크 커스터마이징 Customizing the First Link

$config['first_link'] = 'First';

페이지네이션 맨 왼쪽에 위치할 "처음으로" 링크 글을 설정합니다.First 대신 "처음","맨처음" 등을 쓰시는게 좋겠지요 :)

값을 FALSE 로 설정하면, 이 링크는 렌더링 되지않습니다.

$config['first_tag_open'] = '<div>';

"처음으로"링크의 여는태그 입니다.

$config['first_tag_close'] = '</div>';

Page 144: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

"처음으로"링크의 닫는태그 입니다.

"끝으로"링크 커스터마이징 Customizing the Last Link

$config['last_link'] = 'Last';

페이지네이션 맨 오른쪽에 위치할 "끝으로" 링크 글을 설정합니다.

값을 FALSE 로 설정하면, 이 링크는 렌더링 되지않습니다.

$config['last_tag_open'] = '<div>';

"끝으로"링크의 여는태그 입니다.

$config['last_tag_close'] = '</div>';

"끝으로"링크의 닫는태그 입니다.

"다음" 링크 커스터마이징 Customizing the "Next" Link

$config['next_link'] = '&gt;';

"다음" 링크 글을 설정합니다.

값을 FALSE 로 설정하면, 이 링크는 렌더링 되지않습니다.

$config['next_tag_open'] = '<div>';

"다음"링크의 여는태그 입니다.

$config['next_tag_close'] = '</div>';

"다음"링크의 닫는태그 입니다.

"이전"링크 커스터마이징 Customizing the "Previous" Link

$config['prev_link'] = '&lt;';

"이전" 링크 글을 설정합니다.

값을 FALSE 로 설정하면, 이 링크는 렌더링 되지않습니다.

$config['prev_tag_open'] = '<div>';

"이전"링크의 여는태그 입니다.

$config['prev_tag_close'] = '</div>';

Page 145: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

"이전"링크의 닫는태그 입니다.

"현재페이지"링크 커스터마이징 Customizing the "Current Page" Link

$config['cur_tag_open'] = '<b>';

"현재페이지"링크의 여는태그 입니다.

$config['cur_tag_close'] = '</b>';

"현재페이지"링크의 닫는태그 입니다.

링크숫자 커스터마이징 Customizing the "Digit" Link

$config['num_tag_open'] = '<div>';

링크숫자 링크의 여는태그 입니다.

$config['num_tag_close'] = '</div>';

링크숫자 링크의 닫는태그 입니다.

페이지 숨기기

페이지를 숨기고 싶다면(예를 들어 이전,다음 링크만 출력하고 싶다든지) 아래와 같이 하면 해당 페이지가 렌더링 되지않습니다.

$config['display_pages'] = FALSE;

모든 링크에 클래스 추가

페이지네이션 클래스를 통해 생성된 모든 링크에 클래스 속성을 추가하고자 한다면, "anchor_class"를 원하는 클래스 이름으로 설정하면 됩니다.

주의: 아직 실험중인 드라이버 입니다. 향후 드라이버 구현내용이 바뀔 수 있습니다.

Javascript 클래스

Page 146: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

CodeIgniter 는 Javascript 와 함께 사용할 수 있는 일반적인 기능을 제공합니다.CodeIgniter 를 실행하기 위해서 jQuery 라이브러리가 필요하지는 않습니다. 다른 어떤 스크립트 라이브러리와도 잘 동작합니다. 여기서는 단지 jQuery 라이브러리가 편리하다는것을 보여줍니다.

클래스 초기화

JavaScript 클래스를 컨트롤러의 생성자에서 수동으로 초기화하려면 $this->load->library 함수를 사용합니다. 현재 자동로드가 가능한 라이브러리는 jQuery뿐이며 다음과 같이 자동으로 로드됩니다.

$this->load->library('javascript');

Javascript 클래스에 파라미터를 넘겨줄 수 있습니다.js_library_driver (string) 기본값 'jquery' 그리고 autoload (bool) 기본값 TRUE. 연관배열을 넘겨줘서 기본값을 덮어쓸 수 있습니다:

$this->load->library('javascript', array('js_library_driver' =>

'scripto', 'autoload' => FALSE));

다시말하지만, 현재까지 자동로드로 사용할 수 있는것은 'jquery' 뿐입니다.메인 jquery 파일을 인클루드(include)하는 스크립트 태그가 자동으로 만들어지기를 원하지 않는다면, autoload 를 FALSE 로 하세요.jQuery 라이브러리가 Codeigniter 바깥에 있거나, 이미 뷰파일에 jQuery 를 인클루드하는 스크립트가 있을 경우 유용합니다.

일단 로드되면, jQuery 라이브러리 객체는 다음과 같이 사용할 수 있습니다: $this->javascript

설치및 설정

뷰파일에 변수 설정

자바스크립트 라이브러리 파일들이 프로그램에서 사용가능해야합니다.(역주:당연한 소리를 왜 하는거냐..)

JavaScript 는 클라이언트 사이드 언어이므로 라이브러리는 최종 출력에 포함되어야 됩니다.일반적으로 최종 출력은 뷰이며, 뷰의 <head>안에 다음을 include 해야합니다..

<?php echo $library_src;?>

<?php echo $script_head;?>

Page 147: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$library_src 는 실재 라이브러리 파일이나,같이 사용되는 플러그인 들이 로드되는 곳입니다.

$script_head 에는 이벤트,함수,기타 명령들이 렌더링 되는 위치입니다.

라이브러리 경로등의 설정

JavaScript 라이브러리는 몇 가지 설정이 있습니다.각 설정은 설정파일 파일 application/config.php 또는 config/javascript.php 에서 하거나, 컨트롤러에서 set_item () 메소드통해서 합니다.

로더나 진행상황 표시에 이미지를 사용할수 있습니다. 이미지를 지정하지 않으면 ajax 호출시 "loading"이라는 텍스트를 보여줍니다.

$config['javascript_location'] = 'http://localhost/codeigniter/themes/js/jquery/';

$config['javascript_ajax_img'] = 'images/ajax-loader.gif';

위 설정은 파일이 다운로드 될위치와 같은 위치에 파일이 있을경우 적용할 필요가 없습니다.(역주:무슨소린지 잘 모르겠음.. 아래 문장이 원문이니 각자해석바람.)If you keep your files in the same directories they were downloaded from, then you need not set this configuration items.

jQuery 클래스

jQuery 클래스를 컨트롤러의 생성자에서 수동으로 초기화하려면 다음과 같이$this->load->library 함수를 사용합니다:

$this->load->library('jquery');

옵션으로 두번째 파라미터를 FALSE 로 설정할 경우, jQuery 를 include 하는 스크립트 태그를 자동으로 만들지 않습니다.(기본값은 자동으로 생성하는 것입니다):

$this->load->library('jquery', FALSE);

한 번로드하면 jQuery 라이브러리 객체는 다음과 같이 사용할 수 있습니다 : $this->jquery

jQuery 이벤트

이벤트를 추가하려면 아래와같이 하세요.

$this->jquery->event('element_path', code_to_run());

Page 148: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

위의 예제:

"event"은 다음 중 하나입니다 : blur, change, click, dblclick, error, focus, hover, keydown, keyup, load, mousedown, mouseup, mouseover, mouseup, resize, scroll 또는 unload.

"element_path" 유효한 jQuery 셀렉터 입니다. jQuery 의 독특한 셀렉터 문법에 따라서 이 값은 엘리먼트의 아이디 이거나 , CSS 셀렉터입니다. 예를 들어 "#notice_area" 는 <div id="notice_area">에 적용되고, "#content a.notice" 는 "content" 라는 아이디를 가진 div 안에 "notice"라는 클래스를 속성으로 가진 a 태그들에 적용됩니다.

"code_to_run()" 개발자가 직접 작성한 스크립트이거나,아래의 jQuery 라이브러리가 제공하는 효과(effect)와 같은 액션이 될것입니다.

효과(Effects)

JQuery 라이브러리는 강력한 효과(effects)들을 지원합니다. 효과를 사용하기전에 반드시 로드하셔야 합니다:

$this->jquery->effect([optional path] plugin name);

// for example

$this->jquery->effect('bounce');

hide() / show()

항목을 표시하거나 숨김니다. hide ()는 항목을 숨기고, show ()는 그것을 표시합니다.

$this->jquery->hide(target, optional speed, optional extra information);

$this->jquery->show(target, optional speed, optional extra information);

"target"은 유효한 jQuery 의 셀렉터입니다. "speed" 옵션변수이며 slow (느림), normal (보통), fast (빠름) 중 하나 또는 밀리초 단위의 숫자를 지정합니다.

"extra information" 옵션변수이며, 콜백이나, 기타 추가정보를 포함시킬 수 있습니다.

toggle()

항목의 보이기/숨기기를 전환합니다. 보이는 경우 숨기고 숨어있는 경우 표시합니다.

Page 149: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->jquery->toggle(target);

"target"은 유효한 jQuery 의 셀렉터입니다

animate()

$this->jquery->animate(target, parameters, optional speed, optional extra information);

"target"은 유효한 jQuery 의 셀렉터입니다. "paramters"바꾸고 싶은 CSS 속성입니다. "speed" 옵션변수이며 slow (느림), normal (보통), fast (빠름) 중 하나 또는 밀리초 단위의 숫자를 지정합니다.

"extra information" 옵션변수이며, 콜백이나, 기타 추가정보를 포함시킬 수 있습니다.

자세한 내용은 다음 링크를 참조하십시오 :http://docs.jquery.com/Effects/animate

다음은 jQuery 의 click()이벤트를 이용하여 id 가 "note"인 div 에 animate ()를 사용하는 예제입니다..

$params = array(

'height' => 80,

'width' => '50%',

'marginLeft' => 125

);

$this->jquery->click('#trigger', $this->jquery->animate('#note', $params, normal));

fadeIn() / fadeOut()

$this->jquery->fadeIn(target, optional speed, optional extra information);

Page 150: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->jquery->fadeOut(target, optional speed, optional extra information);

"target"은 유효한 jQuery 의 셀렉터입니다. "speed" 옵션변수이며 slow (느림), normal (보통), fast (빠름) 중 하나 또는 밀리초 단위의 숫자를 지정합니다.

"extra information" 옵션변수이며, 콜백이나, 기타 추가정보를 포함시킬 수 있습니다.

toggleClass()

대상에 대해 CSS 클래스를 추가하거나 제거합니다.

$this->jquery->toggleClass(target, class)

"target"은 유효한 jQuery 의 셀렉터입니다. "class" 는 CSS 클래스 이름입니다. 이 클래스는 CSS 파일에 이미 정의되어 있어야 합니다.

fadeIn() / fadeOut()

대상을 서서히나타게하거나 서서히 사라지게 합니다.

$this->jquery->fadeIn(target, optional speed, optional extra information);

$this->jquery->fadeOut(target, optional speed, optional extra information);

"target"은 유효한 jQuery 의 셀렉터입니다. "speed" 옵션변수이며 slow (느림), normal (보통), fast (빠름) 중 하나 또는 밀리초 단위의 숫자를 지정합니다.

"extra information" 옵션변수이며, 콜백이나, 기타 추가정보를 포함시킬 수 있습니다.

slideUp() / slideDown() / slideToggle()

요소를 슬라이드시킵니다.

$this->jquery->slideUp(target, optional speed, optional extra information);

$this->jquery->slideDown(target, optional speed, optional extra information);

$this->jquery->slideToggle(target, optional speed, optional extra information);

"target"은 유효한 jQuery 의 셀렉터입니다.

Page 151: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

"speed" 옵션변수이며 slow (느림), normal (보통), fast (빠름) 중 하나 또는 밀리초 단위의 숫자를 지정합니다.

"extra information" 옵션변수이며, 콜백이나, 기타 추가정보를 포함시킬 수 있습니다.

플러그인

본 라이브러리에서 몇가지 jQuery 플러그인이 사용가능 합니다.

corner()

대상의 모서리에 다양한 모양을 줄 수 있습니다.. 상세정보 http://www.malsup.com/jquery/corner/

$this->jquery->corner(target, corner_style);

"target"은 유효한 jQuery 의 셀렉터입니다. "corner_style"옵션변수 이며 , 원하는 모서리형태를 지정합니다 round, sharp, bevel, bite,

dog, 등을 사용할 수 있습니다."tl" (top left), "tr" (top right), "bl" (bottom left), "br" (bottom right) 등을 사용하여 각모서리가 다른 형태가 되도록 할 수 있습니다.

$this->jquery->corner("#note", "cool tl br");

tablesorter()

나중에 쓸예정임(역주: 번역이 안된게 아니라 원문이 이렇습니다.)

modal()

나중에 쓸예정임

calendar()

나중에 쓸예정임

이메일 Email ClassCodeIgniter 의 이메일 클래스는 다음의 기능을 제공합니다:

다양한 프로토콜지원( Mail, Sendmail, and SMTP) 다수의 수신자

CC 와 BCC HTML 또는 일반 텍스트 이메일

파일첨부

자동줄바꿈(Word wrapping)

Page 152: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

우선순위설정(Priorities) BCC 배치 모드(대량의 이메일 수신자 목록을 작은 BCC 배치로 쪼개줌). 이메일 디버깅 툴

이메일 보내기

이메일 보내기는 단순할뿐만아니라, 쉽게 설정을 추가할수 있고 , 원한다면 설정파일에 설정을 세팅할수도 있습니다.

아래에 이메일 보내기 기본 예제이 있습니다.주의: 이 예제는 여러분이 컨트롤러에서 이메일을 보낸다는것을 가정합니다.

$this->load->library('email');

$this->email->from('[email protected]', 'Your Name');

$this->email->to('[email protected]');

$this->email->cc('[email protected]');

$this->email->bcc('[email protected]');

$this->email->subject('Email Test');

$this->email->message('Testing the email class.');

Page 153: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->email->send();

echo $this->email->print_debugger();

이메일 환경설정 (Setting Email Preferences)

환경설정 항목은 총 17 가지 입니다.여기에서 설명하는것 처럼 여러분이 직접 설정할수도 있고 , 설정파일을 통해 자동으로 설정할수도 있습니다:

환경설정을 하려면 먼저 설정내용을 배열로 만든후 , 이메일 초기화(initialize)함수로 전달하면 됩니다.아래에 예제가 있습니다:

$config['protocol'] = 'sendmail';

$config['mailpath'] = '/usr/sbin/sendmail';

$config['charset'] = 'iso-8859-1';

$config['wordwrap'] = TRUE;

$this->email->initialize($config);

정보: 대부분의 설정은 기본값을가지고 있기때문에 여러분이 설정값을 지정하지않으면 그 기본값으로 설정 됩니다..

Page 154: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

환경설정파일에 설정하기

위와같이 직접 설정하지 않고 자동으로 설정되게 하려면, 환경설정파일에 설정값을 저장하세요 .먼저 email.php 파일을 새로 만듧니다. 그리고 $config 배열을 그 파일에 추가합니다.마지막으로 config/email.php 로 저장합니다. 이렇게 하면 $this->email->initialize() 함수를 사용할 필요가 없습니다.

이메일 환경설정 Email Preferences

아래는 이메일 전송시 사용되는 설정 항목입니다.

항목 기본값 옵션 설명

useragent CodeIgniter None The "user agent".

protocol mailmail, sendmail, or smtp

메일전송 프로토콜(The mail sending protocol).

mailpath /usr/sbin/sendmail NoneSendmail 함수의 서버상 경로(The server path to Sendmail).리눅스(유닉스)에서 제공하는 sendmail 을 말함

smtp_host No Default None SMTP 서버주소(SMTP Server Address).

smtp_user No Default None SMTP 서버 사용자 아이디(SMTP Username).

smtp_pass No Default None SMTP 서버 사용자 암호(SMTP Password).

smtp_port 25 None SMTP 서버 포트(SMTP Port).

smtp_timeout 5 None SMTP 서버 타임아웃(최대처리 혹은 대기)시간(초)(SMTP Timeout (in seconds)).

wordwrap TRUETRUE or FALSE (boolean)

자동줄바꿈(Enable word-wrap).

wrapchars 76자동줄바꿈시 한줄에 몇개의 문자를 허용할것인가를결정(Character count to wrap at).

mailtype text text or html

메일 타입(일반텍스트/ html). 만약 html 형태의 메일을 보낸다면 삽입된 링크나 이미지 의 경로는 절대경로를 사용하세요 .그렇지않으면 여러분의 컴퓨터에서 잘보이던 페이지가 메일을 받은사람에게는 이것저것 깨져보일테니까요.

charset utf-8 문자셋(utf-8, iso-8859-1 등)(Character set (utf-8, iso-8859-1, etc.)).

validate FALSETRUE or FALSE (boolean)

이메일주소가 적합한지 여부를 검사할지 말지 결정(Whether to validate the email address).

priority 3 1, 2, 3, 4, 5

이메일 우선순위 1 =가장높음. 5 =가장낮음 . 3 = 중간.

Page 155: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

crlf \n "\r\n" or "\n" or "\r"

줄바꿈 문자 ( RFC 822 를 준수하기 위해 "\r\n"을 사용함 ).

newline \n "\r\n" or "\n" or "\r"

줄바꿈 문자 ( RFC 822 를 준수하기 위해 "\r\n"을 사용함 )..

bcc_batch_mode FALSETRUE or FALSE (boolean)

BCC 배치모드 사용여부결정(Enable BCC Batch Mode).

bcc_batch_size 200 None각 BCC 배치에 몇개의 메일주소를 포함하도록할것인지결정(Number of emails in each BCC batch).

이메일 함수 설명 Email Function Reference

$this->email->from()

메일 보내는 사람의 메일주소와 이름을 설정합니다:

$this->email->from('[email protected]', 'Your Name');

$this->email->reply_to()

답신을 받을(reply-to) 메일 주소와 이름을 설정합니다. 설정하지않으면 from 함수에서 제공된 정보를 기본으로 사용하게 됩니다. 예제:

$this->email->reply_to('[email protected]', 'Your Name');

$this->email->to()

수신자의 이메일주소를 설정합니다. 하나이상의 주소를 설정할수있으며 , 여러개를 설정할때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄수도 있습니다:

$this->email->to('[email protected]'); $this->email->to('[email protected],

[email protected], [email protected]'); $list = array('[email protected]',

'[email protected]', '[email protected]');

$this->email->to($list);

Page 156: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->email->cc()

CC 메일주소를 설정합니다. "to" 함수처럼 , 하나이상의 주소를 설정할수있으며 , 여러개를 설정할때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄수도 있습니다

$this->email->bcc()

BCC 메일주소를 설정합니다. "to" 함수처럼 , 하나이상의 주소를 설정할수있으며 , 여러개를 설정할때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄수도 있습니다

$this->email->subject()

메일 제목을 설정합니다:

$this->email->subject('This is my subject');

$this->email->message()

이메일 내용을 설정합니다:

$this->email->message('This is my message');

$this->email->set_alt_message()

HTML 메일을 수신하지 못하는 수신자에게 전달하는경우에 html 로 작성된 내용을 대신할 내용을 설정합니다:

$this->email->set_alt_message('This is the alternative message');

이 항목은 html 로 내용을 작성할경우에 사용할 수 있는 옵션입니다. html 메세지를 보낼때 본 함수를 사용하여 대체메시지를 작성하시지않으면, CodeIgniter 는 자동으로 html 메세지에서 태그를 제거하여 대체메세지로 사용합니다.

$this->email->clear()

모든 이메일 변수들을 초기화 하여 비웁니다.이 함수는 루프를 이용하여 메일을 전송할 경우를 위하여 각 사이클 마다 데이터를 리셋하도록 해줍니다.

foreach ($list as $name => $address)

{

Page 157: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    $this->email->clear();

    $this->email->to($address);

    $this->email->from('[email protected]');

    $this->email->subject('Here is your info '.$name);

    $this->email->message('Hi '.$name.' Here is the info you requested.');

    $this->email->send();

}

파라미터로 TRUE 를 넘겨주면, 첨부파일도 함께 비워집니다:

$this->email->clear(TRUE);

$this->email->send()

메일전송함수입니다. 전송성공여부에 따라서 TRUE / FALSE 를 반환합니다.아래와같이 전송성공여부를 체크하여 적절히 코딩하시면 되겠죠:

if ( ! $this->email->send())

{

Page 158: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

    // Generate error

}

$this->email->attach()

파일을 첨부할수 있게 해주는 함수입니다. 파일 경로와이름(path/name)을 첫번째 파라미터로 넘겨주세요. Note: URL 이 아니라 파일경로를 넘겨야합니다. 여러개의 파일을 첨부할경우 함수를 여러번 호출해주시면됩니다.예제:

$this->email->attach('/path/to/photo1.jpg');

$this->email->attach('/path/to/photo2.jpg');

$this->email->attach('/path/to/photo3.jpg');

$this->email->send();

$this->email->print_debugger()

모든 서버메세지,이메일 헤더,이메일 메세지들을 포함한 문자열을 리턴합니다. 디버깅시에 유용함.

자동줄바꿈 재정의 Overriding Word Wrapping

자동줄바꿈을 사용할때, 아주 긴 링크를 포함한메세지의 경우 링크도 줄바꿈 되기때문에 클릭하면 바로 연결되지않는 상황이 발생할수있습니다. 이런경우 메세지의 일부분을 아래와같이 재정의하여 링크를 보호할 수 있습니다:

The text of your email that

Page 159: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

gets wrapped normally.

{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}

More text that will be

wrapped normally.

{unwrap} {/unwrap}사이에 보호할 부분을 넣습니다

환경설정 클래스 Config Class환경설정클래스는 환경설정정보를 가져오거나 설정하는 방법을 제공합니다.환경설정 정보는 기본 설정파일(application/config/config.php)이나 당신이 만든 설정파일(custom config files)에서 가져올 수 있습니다..

Note: 이 클래스는 시스템에서 자동으로 초기화하므로 수동으로 할필요가 없습니다..

환경설정 파일 해부 (Anatomy of a Config File)

기본적으로 , CodeIgniter 는 하나의 주 설정파일(primary config file) 이 있으며 ,그파일은 application/config/config.php 입니다.그 파일을 열어보시면 환경설정정보가 $config배열로 세팅되어있는것을 알수 있습니다.

당신은 새로운설정정보를 이 파일에 추가할수도 있고, 별도의 파일을 만든후 거기에 추가할 수도 있습니다.별도의 파일을 사용할경우 파일을 만드신후 config 폴더에 저장하셔야합니다.

Note:만약 설정파일을 만드신다면 주 설정파일과 같이 $config 배열을 사용하여 설정항목을 추가하세요 . CodeIgniter 는 배열이름이 동일하더라도 지능적으로 충돌이 일어나지 않도록 관리합니다. (배열인덱스의 이름은 서로 다르다고 가정합니다.).

Page 160: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

환경설정 파일 로드 Loading a Config File

Note: CodeIgniter 는 주 설정파일(application/config/config.php)을 자동으로 로드합니다.그러므로, 당신 직접만드신 설정파일이 있다면 그 파일만 로드 하시면됩니다.

설정파일을 로드하는데는 두가지 방법이 있습니다:

1. 수동 로드(Manual Loading )

직접만드신 설정파일을 로드하려면 그파일을 필요로 하는 컨트롤러 에서 다음의 코드를 사용하여 로드합니다.:

$this->config->load('filename');

filename 는 당신의 설정파일 이름이며 .php 확장자는 붙이지 않습니다.

여러개의 설정파일을 로드할때는 모든설정파일들이 하나의 주 설정 배열 ( master config array)로 합쳐질것입니다.서로다른파일에서라도 배열인덱스의 이름이 동일하다면, 충돌이 일어납니다. 이러한 충돌을 피하기 위해서는 두번째 파라미터를 TRUE 로 하면됩니다. 그러면, 각 설정파일은 설정파일명과 동일한 배열인덱스에 저장될것입니다.:

// Stored in an array with this prototype: $this->config['blog_settings'] = $config

$this->config->load('blog_settings', TRUE);

설정 아이템 가져오기 항목을 보시면 이런방법으로 설정된 값을 어떻게 사용하는지 알수 있으실겁니다.

아래설정은 설정파일이 존재하지않을때 발생하는 에러를 표시하지않도록 해줍니다.:

$this->config->load('blog_settings', FALSE, TRUE);

2. 자동로드

만약 특정 설정파일을 글로벌하게 사용하고자한다면 그 파일을 시스템에서 자동으로 로드할수있도록 설정할 수 있습니다.application/config/autoload.php 파일을 여신후, 해당 설정파일을 추가하세요 .

설정 항목 가져오기 (Fetching Config Items)

당신의 설정파일에서 설정항목을 가져오려면 아래코드를 씁니다.:

Page 161: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->config->item('item name');

item name 은 $config 배열의 인덱스입니다.예를들어 ,언어설정값을 가져오려면 아래와 같이 합니다.:

$lang = $this->config->item('language');

가져오려는 항목이 존재하지않는다면 함수는 FALSE (boolean)를 리턴합니다. 

만약 당신이 직접추가한 설정항목들(config items)을 특정 인덱스에 넣기위해$this->config->load 함수의 두번째 파라미터를 사용하고 있다면 $this->config->item() 함수의 두번째 파라미터로 그 인덱스를 집어넣음으로써 설정값을 가져올 수 있습니다. 예:

// Loads a config file named blog_settings.php and assigns it to an index named "blog_settings"

$this->config->load('blog_settings', TRUE);

// Retrieve a config item named site_name contained within the blog_settings array

$site_name = $this->config->item('site_name', 'blog_settings');

// An alternate way to specify the same item:

$blog_config = $this->config->item('blog_settings');

Page 162: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$site_name = $blog_config['site_name'];

환경설정 항목 설정 Setting a Config Item

동적으로 환경설정을 하거나, 기존의 설정을 변경하려면 아래의 코드를 사용합니다.:

$this->config->set_item('item_name', 'item_value');

item_name 은 설정하고자 하는 $config 배열의 인덱스입니다.item_value 는 설정하고자하는 값입니다.

여러환경 설정(Environments)

현재의 환경에 따라 다른 설정 파일을 로드할 수 있습니다.ENVIRONMENT 상수가 index.php 에 정의되어 있으며, 여러 환경의 취급 섹션에서 자세히 설명하고 있습니다.

특정 환경 설정 파일을 작성하려면 application / config / {ENVIRONMENT} / {FILENAME} php 설정 파일을 만들거나 복사합니다.

예를 들어 프로덕션 환경에서 config.php 를 만들려면 다음과 같이합니다 :

1. application / config / production /디렉토리를 만듭니다

2. 기존 config.php 위의 디렉토리에 복사합니다

3. application/config/production/config.php 를 원하는 대로 설정합니다

ENVIRONMENT 상수를 'production'으로 설정하면,새로 만든 환경설정이 담긴config.php 가 로드됩니다.

환경 관련 폴더에 다음의 설정 파일을 넣을 수 있습니다:

기본 CodeIgniter 설정 파일들

사용자 지정 설정 파일들

주의: CodeIgniter 는 현재의 환경 설정 파일을 먼저로드하려고 시도합니다. 만약 파일이 존재하지 않으면 전역 설정 파일 (즉, application/config/에있는 파일)을 로드합니다.그러므로, 모든 환경설정 파일들을 새로만든 디렉토리에 복사할 필요하는 없습니다. 단지 달라지는 부분만 넣어두면 됩니다.

헬퍼 함수들 Helper Functions

환경설정 클래스는 다음의 헬퍼함수들을 포함합니다.:

$this->config->site_url();

Page 163: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

이 함수는 사이트 URL 을 반환합니다.이때 설정파일에 지정한 인덱스( "index") 값도 함께 반환합니다. 

$this->config->base_url();

이 메서드는 사이트의 URL 을 가져옵니다.추가로 스타일 시트 및 이미지의 경로도 가져올 수 있습니다(옵션)

위의 두 메서드는 일반적으로 URL 헬퍼 의 해당 함수를 통해 액세스됩니다. 

$this->config->system_url();

이함수는 시스템폴더( system folder) url 을 리턴합니다.

캐싱 드라이버

CodeIgniter 는 몇 가지 가장 인기있는 형식의 빠른 동적 캐싱에 대한 래퍼를 제공합니다. 파일 기반 캐싱 이외는 특정한 서버 요구 사항이 필요합니다.만약 필요한 요구사항이 만족되지 않으면 치명적인 예외를 던집니다.

목차

사용 예제

함수 가이드

사용 가능한 드라이버

Alternative PHP Cache (APC) 캐싱 파일기반 캐싱

메모리 캐시를 이용한 캐싱

더미캐시

사용 예제

The following example will load the cache driver, specify 다음 예제는 APC 를 캐시드라이버로 로드하고, APC 를 사용할 수없는 경우 파일 기반 캐싱으로 대체합니다.

Page 164: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));

if ( ! $foo = $this->cache->get('foo'))

{

     echo 'Saving to the cache!<br />';

     $foo = 'foobarbaz!';

     // Save into the cache for 5 minutes

     $this->cache->save('foo', $foo, 300);

}

echo $foo;

함수 가이드

Page 165: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

is_supported(driver['string'])

이 메서드는$this->cache->get()를 통해 드라이버에 접근할 때 자동으로 호출됩니다. 그러나, 만약 별도의 드라이버를 사용하는 경우이 메서드를 호출하여 드라이버가 서버환경에서 지원되는지 확인하십시오..

if ($this->cache->apc->is_supported())

{

     if ($data = $this->cache->apc->get('my_cache'))

     {

          // do things.

     }

}

get(id['string'])

이 메서드는 캐시에서 한 항목을 가져옵니다. 만약 해당 항목이없는 경우,이 메소드는 FALSE 을 반환합니다.

$foo = $this->cache->get('my_cached_item');

save(id['string'], data['mixed'], ttl['int'])

캐시에 한 항목을 저장합니다. 저장에 실패하면 FALSE 를 리턴합니다.

Page 166: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

옵션인 세번째 파라미터(캐시 생존시간)의 기본값은 60 초 입니다.

$this->cache->save('cache_item_id', 'data_to_cache');

delete(id['string'])

캐시에서 지정한 항목을 제거합니다.제거에 실패하면 FALSE 를 리턴합니다.

$this->cache->delete('cache_item_id');

clean()

모든 캐시를 지웁니다.지우는데 실패하면 FALSE 를 리턴합니다..

$this->cache->clean();

cache_info()

모든 캐시에 대한 정보를 리턴합니다.

var_dump($this->cache->cache_info());

get_metadata(id['string'])

특정 캐시 항목에 대한 상세정보를 리턴합니다.

var_dump($this->cache->get_metadata('my_cached_item'));

드라이버

Alternative PHP Cache (APC) 캐싱

위에서 설명한 함수들은 아래와 같이 특정 어댑터를 지정하지 않고 사용할 수 있습니다.:

$this->load->driver('cache');

$this->cache->apc->save('foo', 'bar', 10);

Page 167: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

APC 에 대한 더 자세한 정보는 http://php.net/apc 를 참조하십시오.

파일기반 캐싱

출력 클래스의 캐싱과 달리 파일 기반 캐싱 드라이버는 뷰파일의 일부를 캐시할 수 있습니다. 파일기반의 캐싱은 주의해서 사용해야 합니다. 디스크에 읽고 쓰는것이 너무 빈번해져 캐싱의 효과를 넘어서버릴 수 있습니다..

위에서 설명한 모든 메서드는 다음과 같이 특정 어댑터를 드라이버 로더에 지정하지 않고 사용할 수 있습니다: 

$this->load->driver('cache');

$this->cache->file->save('foo', 'bar', 10);

메모리에 캐싱

application/config/ 에 있는 memcached.php 설정파일에 여러개의 메모리캐싱서버를 지정할 수 있습니다.

위에서 설명한 모든 메서드는 다음과 같이 특정 어댑터를 드라이버 로더에 지정하지 않고 사용할 수 있습니다::

$this->load->driver('cache');

$this->cache->memcached->save('foo', 'bar', 10);

For more information on Memcached, please see http://php.net/memcached

더미 캐시

캐시의 끝단이며, 항상 'miss'합니다.(뭔소린지 ..).데이터를 저장하지는 않지만, 캐싱이 지원되지 않는 환경에서도 캐싱 소스코드를 유지할 수 있게 합니다.

Zip 압축 Zip Encoding ClassZip 압축 클래스를 이용하시면 Zip 으로 압축된 파일을 만들 수 있습니다. 압축된것은 데스크탑으로 다운로드 할수도 있고 디렉토리로 저장할수도 있습니다.

Page 168: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

클래스 초기화 Initializing the Class

다른 대부분의 클래스들처럼 Zip 클래스도 컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:

$this->load->library('zip');

일단 로드되면 , Zip 라이브러리 객체는$this->zip 로 사용가능합니다.

사용예 Usage Example

이 예제는 어떻게 파일을 압축하고, 서버의 폴더에 저장하고, 데스크탑에 다운로드하는지를 보여줍니다.

$name = 'mydata1.txt';

$data = 'A Data String!';

$this->zip->add_data($name, $data);

// zip 파일을 "my_backup.zip"라는 이름으로 서버의 폴더에 저장합니다.

$this->zip->archive('/path/to/directory/my_backup.zip');

Page 169: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

// "my_backup.zip" 파일을 데스크탑에 다운로드 합니다.

$this->zip->download('my_backup.zip');

함수 참조 Function Reference

$this->zip->add_data()

Zip 으로 압축할 데이터를 추가합니다. 첫번째 파라미터는 반드시 파일명을, 두번째 파라미터는 반드시 데이터를 문자열로 포함하고 있어야 합니다:

$name = 'my_bio.txt';

$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

이 함수를 여러번 호출하여 여러개의 파일을 하나로 압축할수도 있습니다. 예:

$name = 'mydata1.txt';

Page 170: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$data = 'A Data String!';

$this->zip->add_data($name, $data);

$name = 'mydata2.txt';

$data = 'Another Data String!';

$this->zip->add_data($name, $data);

아래와같이 배열로 여러파일을 넘겨줄수도 있습니다:

$data = array(

                'mydata1.txt' => 'A Data String!',

                'mydata2.txt' => 'Another Data String!'

            );

Page 171: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->zip->add_data($data);

$this->zip->download('my_backup.zip');

만약 압축된 데이터를 하위폴더로 정리하고싶다면 ,파일명에 경로도 같이 적어주시면 됩니다:

$name = 'personal/my_bio.txt';

$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

위 예제에서는 personal 라는 폴더안에 my_bio.txt 파일이 존재하게 됩니다 .

$this->zip->add_dir()

디렉토리를 추가할때 사용합니다. 일반적으로는 $this->zip->add_data()함수에서 데이터를 하위디렉토리에 놓을수 있기때문에 사용할 필요가 없지만, 빈 폴더를 만들려면 사용해야겠지요 .예제:

$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"

$this->zip->read_file()

서버에 이미존재하는 파일을 압축할때 사용합니다. 파일경로를 넘겨주면 zip 클래스는 그 파일을 읽은후 압축파일에 추가합니다:

Page 172: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$path = '/path/to/photo.jpg';

$this->zip->read_file($path);

// Download the file to your desktop. Name it "my_backup.zip"

$this->zip->download('my_backup.zip');

만약 Zip 으로 압축된 파일의 디렉토리 구조를 유지하도록 하고싶다면 , 두번째 파라미터를TRUE 로 설정합니다. 예:

$path = '/path/to/photo.jpg';

$this->zip->read_file($path, TRUE);

// Download the file to your desktop. Name it "my_backup.zip"

Page 173: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->zip->download('my_backup.zip');

위 예제에서,photo.jpg 파일은 path/to/ 아래 위치하게 됩니다.

$this->zip->read_dir()

서버에 이미 존재하는 폴더 및 폴더내용을 압축할때 사용합니다. 폴더경로를 넘겨주면 zip 클래스는 재귀적으로 읽어들인다음 Zip 으로 압축합니다. 모든 하위폴더 및 파일들이 압축됩니다. 예제 :

$path = '/path/to/your/directory/';

$this->zip->read_dir($path);

// Download the file to your desktop. Name it "my_backup.zip"

$this->zip->download('my_backup.zip');

기본적으로 Zip 으로 압축된 결과에는 첫번째 파라미터의 모든 경로가 포함됩니다.만약 압축하려는 폴더의 상위 경로명을 포함하지 않으려면 두번째 파라미터를 FALSE 로 두세요 예:

$path = '/path/to/your/directory/';

Page 174: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->zip->read_dir($path, FALSE);

이렇게 하면 /path/to/your 경로는 압축파일에서 빠지게됩니다.

$this->zip->archive()

Zip 으로 압축된 파일을 서버의 디렉토리에 생성합니다. 유효한 서버경로와 함께 압축파일의 이름을 넘겨줍니다. 디렉토리는 쓰기 가능해야합니다(666 이나 777 이면 OK). 예:

$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip

$this->zip->download()

서버로부터 Zip 파일을 다운로드 하도록 해줍니다. 이함수에는 생성될 zip 파일명을 넘겨줘야합니다. 예:

$this->zip->download('latest_stuff.zip'); // 파일명은 "latest_stuff.zip"가 될것입니다.

참고 :  이 함수를 호출하는 컨트롤러의 함수에서는 어떤 데이터도 표시(display)하게 해서는 안됩니다. 만약 그럴경우 여러가지 서버 헤더가 전송되게 되므로 다운로드가 실행되게 되며 파일은 바이너리로 취급되게 됩니다.

$this->zip->get_zip()

Zip 으로 압축된 파일데이터를 리턴합니다. 데이터에 특별한 작업을 하는경우가 아니라면 이함수를 사용하실일은 잘 없으거예요 . 예:

$name = 'my_bio.txt';

$data = 'I was born in an elevator...';

Page 175: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->zip->add_data($name, $data);

$zip_file = $this->zip->get_zip();

$this->zip->clear_data()

Zip 클래스는 zip 데이터를 캐시하고 있기때문에 위에서 보여준 각 함수에서 Zip 을 다시 컴파일 할 필요가 없습니다. 그러나 만일 , 각각 다른 데이터를 가진 여러개의 Zip 파일을 생성하고자 한다면 , 각각마다 캐시를 제거(clear)할 수 있습니다. 예:

$name = 'my_bio.txt';

$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

$zip_file = $this->zip->get_zip();

$this->zip->clear_data();

Page 176: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$name = 'photo.jpg';

$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents

$this->zip->download('myphotos.zip');

HTML 테이블

Table 클래스는 데이터베이스나 배열로 부터 HTML 테이블을 자동으로 생성할 수 있도록 해줍니다.

클래스 초기화 Initializing the Class

다른 클래스들 처럼 , Table 클래스도 컨트롤러에서 $this->load->library 함수로 초기화 합니다:

$this->load->library('table');

일단 로드되면 , $this->table 을 통해서 테이블 객체를 이용합니다.

예제 Examples

이번 예제는 다차원 배열로부터 어떻게 테이블을 만드는지를 보여줍니다. 주의할점은 첫번째 배열인덱스가 테이블의 제목(heading)이 된다는 점입니다. set_heading() 함수를 이용하면 여러분이 직접 제목을 작성하실수도 있습니다.그 방법은 저 아래서 설명합니다.

Page 177: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->library('table');

$data = array(

             array('Name', 'Color', 'Size'),

             array('Fred', 'Blue', 'Small'),

             array('Mary', 'Red', 'Large'),

             array('John', 'Green', 'Medium')

             );

echo $this->table->generate($data);

이번 예제는 데이터베이스 쿼리결과로 테이블을 만드는것을 보여줍니다.테이블 클래스는 테이블 이름들로부터 제목(heading)을 자동으로 설정합니다. set_heading() 함수를 이용하면 여러분이 직접 제목을 작성하실수도 있습니다.그 방법은 저 아래서 설명합니다.

Page 178: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->library('table');

$query = $this->db->query("SELECT * FROM my_table");

echo $this->table->generate($query);

이번 예제는 각각의 파라미터를 이용해서 테이블을 만드는법을 보여줍니다:

$this->load->library('table');

$this->table->set_heading('Name', 'Color', 'Size');

$this->table->add_row('Fred', 'Blue', 'Small');

$this->table->add_row('Mary', 'Red', 'Large');

Page 179: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->table->add_row('John', 'Green', 'Medium');

echo $this->table->generate();

이번예제는 위와 유사하나 개별파라미터가 아닌 배열을 통해 테이블을 만드는법을 보여줍니다:

$this->load->library('table');

$this->table->set_heading(array('Name', 'Color', 'Size'));

$this->table->add_row(array('Fred', 'Blue', 'Small'));

$this->table->add_row(array('Mary', 'Red', 'Large'));

$this->table->add_row(array('John', 'Green', 'Medium'));

Page 180: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

echo $this->table->generate();

테이블 모양 바꾸기 Changing the Look of Your Table

여러분이 원하는 레이아웃에 맞추어 테이블 템플릿을 설정할 수 있습니다. 아래는 기본적인 테이블 템플릿 설정 예제입니다:

$tmpl = array (

                    'table_open'          => '<table border="0" cellpadding="4" cellspacing="0">',

                    'heading_row_start'   => '<tr>',

                    'heading_row_end'     => '</tr>',

                    'heading_cell_start'  => '<th>',

                    'heading_cell_end'    => '</th>',

                    'row_start'           => '<tr>',

Page 181: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                    'row_end'             => '</tr>',

                    'cell_start'          => '<td>',

                    'cell_end'            => '</td>',

                    'row_alt_start'       => '<tr>',

                    'row_alt_end'         => '</tr>',

                    'cell_alt_start'      => '<td>',

                    'cell_alt_end'        => '</td>',

                    'table_close'         => '</table>'

              );

Page 182: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->table->set_template($tmpl);

참고:  템플릿블록안에는 두 세트의 "row" 블록이 있다는것을 알 수 있습니다. 이렇게하면 한줄(row)마다 반복되는 다른 색 혹은 디자인을 적용할수 있습니다.(예를들어 첫줄 빨간색, 둘째줄 파란색 ,셋째줄 빨간색 , 네째줄 파란색 .......... 이런식 )

완벽한 구조의 템플릿을 만들필요는 없습니다. 테이블의 일부분만 바꾸고싶다면, 그부분만 템플릿을 만들면 됩니다. 이번예제는 테이블을 여는 태그만 바뀌게 됩니다:

$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1"

class="mytable">' );

$this->table->set_template($tmpl);

함수 레퍼런스 Function Reference

$this->table->generate()

생성된 테이블을 포함한 문자열을 리턴합니다. 배열이나 데이터베이스 결과 객체를 파라미터로 받습니다.

$this->table->set_caption()

테이블의 캡션을 설정합니다.

$this->table->set_caption('Colors');

$this->table->set_heading()

Page 183: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

테이블의제목(heading)을 설정합니다. 배열이나 , 각각의 제목을 파라미터로 넘겨줄수 있습니다:

$this->table->set_heading('Name', 'Color', 'Size'); $this->table-

>set_heading(array('Name', 'Color', 'Size'));

$this->table->add_row()

한줄(row)을 테이블에 추가합니다.배열이나 혹은 각 값을 넘겨줄수 있습니다:

$this->table->add_row('Blue', 'Red', 'Green'); $this->table->add_row(array('Blue',

'Red', 'Green'));

각 셀의 태그에 속성을 부여하려면 연관배열을 사용하세요.데이터를 채우려면'data' 키를 사용하시고, 다른 키들은 모두 key='값' 의 형식으로 추가됩니다. :

$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);

$this->table->add_row($cell, 'Red', 'Green');

// generates

// <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>

$this->table->make_columns()

이 함수는 1 차원 배열을 받아서 원하는 칼럼수에 맞추어 다차원배열을 생성합니다. 이 함수를 통해서 값은 1 차원배열인데, 표현하고자하는 칼럼의 개수가 그것보다 작은경우를 효과적으로 처리할수 있습니다.아래 예제를 보시면 이해가 쉬우실거예요:

Page 184: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven',

'twelve');

$new_list = $this->table->make_columns($list, 3);

$this->table->generate($new_list);

// Generates a table with this prototype

<table border="0" cellpadding="4" cellspacing="0">

<tr>

<td>one</td><td>two</td><td>three</td>

Page 185: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

</tr><tr>

<td>four</td><td>five</td><td>six</td>

</tr><tr>

<td>seven</td><td>eight</td><td>nine</td>

</tr><tr>

<td>ten</td><td>eleven</td><td>twelve</td></tr>

</table>

$this->table->set_template()

여러분이 만든 템플릿을 적용할 수 있도록 해 줍니다. 전체템플릿이나, 부분템플릿을 적용하실 수 있습니다..

$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1"

class="mytable">' );

$this->table->set_template($tmpl);

Page 186: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->table->set_empty()

테이블셀의 값이 없을경우 기본값을 설정할수 있습니다.예를들어 아래와같이 한칸의 공백을 표시하는 예약어를 기본값으로 설정할수 있습니다:

$this->table->set_empty("&nbsp;");

$this->table->clear()

테이블을 의 제목과 데이터를 모두 비웁니다. 포함하고 있는 데이터가 다른 여러테이블을 보여줘야할경우 이전 테이블의데이터를 비우는데 사용합니다. 예:

$this->load->library('table');

$this->table->set_heading('Name', 'Color', 'Size');

$this->table->add_row('Fred', 'Blue', 'Small');

$this->table->add_row('Mary', 'Red', 'Large');

$this->table->add_row('John', 'Green', 'Medium');

Page 187: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

echo $this->table->generate();

$this->table->clear();

$this->table->set_heading('Name', 'Day', 'Delivery');

$this->table->add_row('Fred', 'Wednesday', 'Express');

$this->table->add_row('Mary', 'Monday', 'Air');

$this->table->add_row('John', 'Saturday', 'Overnight');

echo $this->table->generate();

$this->table->function

모든 셀 데이터에 PHP 내장함수나 사용가능한 함수배열 객체 (function array object)를 적용합니다

Page 188: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->load->library('table');

$this->table->set_heading('Name', 'Color', 'Size');

$this->table->add_row('Fred', '<strong>Blue</strong>', 'Small');

$this->table->function = 'htmlspecialchars';

echo $this->table->generate();

위의 예제에서는 모든 셀 데이터에 PHP 의 htmlspecialchars() 함수가 적용되고, 결과는 다음과 같습니다 :

<td>Fred</td><td>&lt;strong&gt;Blue&lt;/strong&gt;</td><td>Small</td>

암호화 Encryption Class암호화 클래스는 데이터를 암호화하는 두가지 방법을 제공합니다.본 클래스는 Mcrypt 라이브러리를 사용하여 암호화 하거나, 비트단위의 랜덤해쉬 XOR 인코딩방법(randomly hashed bitwise XOR encoding scheme)을 사용합니다. 만약 서버에서 Mcrypt 라이브러리 사용이 불가능하다면 인코딩된 메세지는 암호화세션이나 혹은 다른 '가벼운'목적에 적절한 수준의 보안을 제공합니다. Mcrypt 라이브러리 사용이 가능하다면 매우 높은 수준의 보안이 제공됩니다.

키 설정 Setting your Key

Page 189: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

키란 암호화 과정을 컨트롤하고 암호화된 문자열을 다시 복호화 할수 있도록 해주는 작은 정보조각입니다. 사실, 여러분이 선택한 키는 그 키를 사용하여 암호화한 데이터를 복호화할수 있는 유일한 수단이 됩니다. 그러므로 신중히 선택하셔야함은 물론이고 , 영속적인(변하지않는) 데이터에 사용할 경우 키를 변경하지 않으셔아 합니다.

키를 잘 보호해야한다는것은 말할 필요도 없겠죠 .누군가가 여러분의 키를 손에 넣을수 있다면, 암호화된 데이터는 쉽게 해석되어버릴테니까요. 만약 서버를 여러분이 완전히 통제할수 있는 상황이 아니라면(호스팅을 받고있다든지), 키를 완전히 보호할수 있다고 보장할수 없습니다. 그러므로 , 신용카드 정보라든지 하는 매우 중요한 정보의 암호화를 하기전에 신중히 생각하셔야 합니다.

암호화 알고리즘의 장점을 최대한 활용하고자한다면 키는 영문기준으로 32글자(128 비트)가 되어야하며 문자와 숫자, 대문자와 소문자가 섞인 랜덤 문자열로 하는것이 좋습니다.키를 단순한 문자열로 만들지 마세요 . 가능한한 랜덤하게 만드셔야 합니다.

키는 application/config/config.php 파일에 저장 하거나 혹은 여러분 스스로 만든 저장 매커니즘을 사용하여 동적으로 암호/복호화할때만 전달하도록 할수 있습니다.

application/config/config.php 파일에 저장하려면 해당파일을 여신후 아래와 같이 설정하세요 :

$config['encryption_key'] = "YOUR KEY";

메세지 길이 Message Length

인코딩 된 메시지는 원본 메세지에 비해서 약 2.6 배정도 더 길어집니다.예를들어,"my super secret data" 라는 문자열은 21 자인데 인코딩 되면 대략 55 자가 됩니다.('대략'이라고 표현한 이유는 인코딩시 메세지의 길이는 원본에 정확히 선형적으로 비례하는것이 아니라 64비트 클러스터(64 bit clusters)에 따라 증가하기때문입니다.:we say "roughly" because the encoded string length increments in 64 bit clusters, so it's not exactly linear). 데이터 저장 메커니즘을 선택할때 이러한 사실을 염두에 두셔야합니다. 예를 들어 쿠키의 경우 4K 까지의 정보만을 저장할수 있으니까요.

클래스 초기화 Initializing the Class

다른 클래스들과 마찬가지로 , 암호화 클래스도 컨트롤러 클래스에서 $this->load->library 함수를 이용하여 초기화 합니다:

$this->load->library('encrypt');

일단 로드되면 암호화 라이브러리 객체는 $this->encrypt 를 통해 사용하실 수있습니다.

$this->encrypt->encode()

데이터 암호화를 수행하고 그 결과를 반환합니다.예:

Page 190: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$msg = 'My secret message';

$encrypted_string = $this->encrypt->encode($msg);

만약 config 파일에 정의해두신 키 대신 다른 키를 사용하고자 한다면 옵션으로 두번째 파라미터를 통해 키를 전달할수 있습니다.:

$msg = 'My secret message';

$key = 'super-secret-key';

$encrypted_string = $this->encrypt->encode($msg, $key);

$this->encrypt->decode()

암호화 된 문자열을 복호화(해독)합니다. 예:

$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';

$plaintext_string = $this->encrypt->decode($encrypted_string);

설정파일에 있는 암호키대신 다른것을 사용하려면, 두번째 파라미터로 넘기면 됩니다.

Page 191: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$msg = 'My secret message';

$key = 'super-secret-key';

$encrypted_string = $this->encrypt->decode($msg, $key);

$this->encrypt->set_cipher();

Mcrypt 해독자(cipher)를 설정할 수 있게 합니다. 기본으로 MCRYPT_RIJNDAEL_256 가 사용됩니다:

$this->encrypt->set_cipher(MCRYPT_BLOWFISH);

Php.net 을 방문하시면 가능한 해독자목록(available ciphers)을 확인하실 수 있습니다.

서버에서 Mcrypt 가 지원되는지 확인하고싶다면 아래의 코드를 사용하세요:

echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';

$this->encrypt->set_mode();

Mcrypt 모드를 설정합니다. 기본으로 MCRYPT_MODE_CBC 가 사용됩니다. 예:

$this->encrypt->set_mode(MCRYPT_MODE_CFB);

Php.net 에서 사용가능한 모드목록( available modes)을 확인하실 수 있습니다.

$this->encrypt->sha1();

SHA1 인코딩 함수 입니다. 문자열을 넘겨주면 160 비트의 단방향 해쉬를 리턴합니다. 참고: SHA1 은 MD5 에서처럼 복호화(decode) 불가능합니다. 예:

$hash = $this->encrypt->sha1('Some string');

Page 192: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

대부분의 경우 PHP 는 SHA1 을 기본으로 제공합니다. 만약 해쉬를 인코딩하는것만 필요하다면 php 에서 기본제공하는 함수를 사용하는것이 좀더 간단합니다.:

$hash = sha1('Some string');

만약 서버에서 SHA1 를 지원하지않는다면 위에서 제공하는 함수를 사용하시면됩니다.

$this->encrypt->encode_from_legacy($orig_data, $legacy_mode = MCRYPT_MODE_ECB, $key = '');

CodeIgniter 1.x 에서 암호화된 데이터를 CodeIgniter 2.x 암호화 클래스와 호환성을 갖도록 다시 인코딩 합니다.파일이나 데이터베이스등에 인코딩된 데이터가 저장된경우, 서버에서 Mcrypt 를 지원한다면 이 메서드를 사용할 수 있습니다. 인코딩된 세션이나 임시 데이터등의 경우에 있어서는 개발자가 손댈 부분이 없습니다.하지만,2.x 이전버전에서 인코딩 된 데이터는 디코딩 되지않기 때문에 세션은 제거됩니다.

왜 구버전의 인코딩, 디코딩을 유지하지 않고 다시 인코딩하는 메서드만 제공하는가? 암호화 클래스의 알고리즘은 CodeIgniter 2.x 에서 성능과 안전성 모두 향상되었습니다. 그래서, 이전 방법을 사용하지 않는것이 좋다고 생각했습니다. 암호화 라이브러리를 확장하여 이전버전으로 동작하게 할 수 있겠지만, 신중하게 생각하시기 바랍니다.

$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);

Parameter Default Description

$orig_data 없음 CodeIgniter 1.x 암호화 클래스에서 암호화된 데이터

$legacy_mode MCRYPT_MODE_ECB원래 데이터를 암호화하는 데 사용된 Mcrypt 모드. CodeIgniter 1.x 의 기본값은 MCRYPT_MODE_ECB 이었으며, 별도로 지정하지않으면 이 값이 사용됩니다.

$key 없음암호화 키. 먼저 설명한 것처럼 일반적으로 설정 파일에 지정된 것.

장바구니 Shopping Cart Class장바구니 클래스는 유저가 사이트를 이용하는 동안 아이템들이 세션에 추가되어 유효한 상태를 유지하도록 해줍니다. 세션에 추가된 아이템들은 장바구니 형식으로 검색되거나 출력될수있고, 유저가 장바구니에서 아이템의 수량을 고치거나 삭제할수 있도록 해줍니다.

장바구니 클래스는 오직 장바구니의 핵심 기능들만을 제공하므로, 배송, 신용카드 승인, 또는 다른 처리 컴포넌트들은 제공하지 않습니다.

장바구니 클래스 초기화 Initializing the Shopping Cart Class

중요: 장바구니 클래스는 장바구니 정보를 데이타베이스에 저장하기위해 CodeIgniter 의 세션 클래스를 사용합니다. 그러므로 장바구니 클래스를 사용하기전에 세션 문서에 제시되어

Page 193: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

있는 것 처럼 데이타베이스 테이블을 설정해야 합니다. 그리고 데이타베이스를 사용하기위해 application/config/config.php 파일 안에있는 세션 환경설정을 설정합니다.

컨트롤러에서 장바구니 클래스를 초기화하기위해 $this->load->library 함수을 사용합니다.

$this->load->library('cart');

장바구니 클래스가 로드되면, $this->cart 를 사용할수 있게 됩니다.

Note: 장바구니 클래스는 자동으로 세션클래스를 로드하고 초기화합니다. 그러므로 세션을 다른 곳에서 사용하지 않는 이상, 세션 클래스를 로드 할 필요는 없습니다.

장바구니에 아이템 추가 Adding an Item to The Cart

장바구니에 아이템을 추가하려면, 아래와 같이 상품 정보가 담긴 배열을 $this->cart->insert()으로 넘기면 됩니다.

$data = array(

               'id'      => 'sku_123ABC',

               'qty'     => 1,

               'price'   => 39.95,

               'name'    => 'T-Shirt',

Page 194: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

               'options' => array('Size' => 'L', 'Color' => 'Red')

            );

$this->cart->insert($data);

Important: 위의 배열에서 처음 4 개의 인덱스들 (id, qty, price, name)은 필수입니다. 저것들 중에 하나라도 빠질경우, 데이타는 장바구니에 저장되지 않습니다. 다섯번째 인덱스인 (options)는 선택사항 입니다. 다섯번째 인덱스는 상품이 추가 옵션을 가질 경우 사용될 수 있도록 되어있습니다. 위에 보이는것처럼 options 는 배열을 사용합니다.

다섯개의 정해진 인덱스:

id - 각각의 상품은 고유번호를 가져야 합니다. 이것은 보통 SKU 또는 고유번호가 됩니다. qty - 구입될 수량입니다. price - 상품의 가격입니다. name - 상품의 이름 입니다. options - 상품을 식별할 추가적인 정보입니다. 이것들은 배열을 통해서 전달되어야 합니다.

위에 있는 다섯개의 인덱스 말고도 2 개의 정해진 인덱스 rowid and subtotal 가 있습니다. 이것들은 장바구니 클래스 내부에서 사용되므로 장바구니에 데이타를 추가할때 이 단어들을 인덱스로 사용해서는 안됩니다.

Page 195: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

배열은 추가적인 데이타 포함 할 수 있습니다. 배열에 포함된 모든 것은 무엇이든지 세션에 저장됩니다. 그렇지만, 좀더 쉽게 상품들을 테이블에 출력하기 위해서 데이타를 형식에 맞춰 통일시키면 좋습니다

insert() 함수로 아이템을 입력에 성공하면 $rowid 가 리턴됩니다.

다량의 아이템들을 장바구니에 추가 Adding Multiple Items to The Cart

아래처럼 다중배열을 사용하여 여러개의 아이템을 한번에 장바구니로 추가하는것이 가능합니다. 이것은 같은 페이지 안에 있는 여러 상품들 중에 사용자가 선택할수 있도록 할때 편리합니다.

$data = array(

               array(

                       'id'      => 'sku_123ABC',

                       'qty'     => 1,

                       'price'   => 39.95,

Page 196: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                       'name'    => 'T-Shirt',

                       'options' => array('Size' => 'L', 'Color' => 'Red')

                    ),

               array(

                       'id'      => 'sku_567ZYX',

                       'qty'     => 1,

                       'price'   => 9.95,

                       'name'    => 'Coffee Mug'

Page 197: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                    ),

               array(

                       'id'      => 'sku_965QRS',

                       'qty'     => 1,

                       'price'   => 29.95,

                       'name'    => 'Shot Glass'

                    )

            );

Page 198: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->cart->insert($data);

장바구니 출력 Displaying the Cart

장바구니를 출력하려면 아래에 보이는 코드와 비슷하게 뷰 파일을 만듭니다.

이 예제는 폼 헬퍼를 사용 한다는 점을 주의해주세요.

Page 199: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

장바구니 업데이트

장바구니에 있는 정보를 업데이트 하려면 Row ID 와 수량이 들어간 배열을 $this->cart->update()에 전달하면 됩니다.

Note: 만약 수량이 0 으로 지정된다면, 아이템은 장바구니에서 삭제됩니다.

<th>Item Description</th> <th style="text-align:right">Item Price</th> <th style="text-align:right">Sub-Total</th></tr> <?php $i = 1; ?> <?php foreach($this->cart->contents() as $items): ?>

<?php echo form_hidden($i.'[rowid]', $items['ro

<tr> <td><?php echo form_input(array('name' => $ <td>

<?php echo $items['name']; ?>

<?php if ($this->cart->has_op

<p><?php forea

<st

<?php endfo</p>

<?php endif; ?>

</td> <td style="text-align:right"><?php echo $this <td style="text-align:right">$<?php echo $thi</tr>

Page 200: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$data = array(

               'rowid' => 'b99ccdf16028f015540f341130b6d8ec',

               'qty'   => 3

            );

$this->cart->update($data);

Page 201: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

// Or a multi-dimensional array

$data = array(

               array(

                       'rowid'   => 'b99ccdf16028f015540f341130b6d8ec',

                       'qty'     => 3

                    ),

               array(

Page 202: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

                       'rowid'   => 'xw82g9q3r495893iajdh473990rikw23',

                       'qty'     => 4

                    ),

               array(

                       'rowid'   => 'fh4kdkkkaoe30njgoe92rkdkkobec333',

                       'qty'     => 2

                    )

            );

Page 203: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->cart->update($data);

Row ID 가 뭥미?  row ID 는 아이템이 장바구니에 추가될때 장바구니 코드에 의해 생성되는 유니크한 식별자 입니다. 유니크한 ID 가 생성되는 이유는 다른 옵션의 똑같은 상품들이 장바구니에 의해 관리 될수있기 때문입니다.

예를 들어, 어떤 사람이 2 장의 각각 다른 사이즈의 똑같은 티셔츠(같은 상품 ID)를 산다고 합시다. 두개의 티셔츠는 똑같은 티셔츠이므로 상품 ID (그리고 다른 옵션들)는 같습니다. 2장의 티셔츠의 다른점은 사이즈 뿐입니다. 이렇게 두개의 셔츠가 따로 관리되어야 하기때문에 장바구니는 서로 다른 식별자를 가져야 합니다. 여기서 두장의 티셔츠는 상품 ID 를 기반으로 유니크한 "row ID"를 가짐으로서 따로 관리될수 있고 어떠한 옵션하고도 연결될 수있습니다.

거의 대부분, 장바구니를 업데이트 하는것은 "장바구니 보기" 페이지를 통해 사용자가 하는것입니다. 개발자 입장에서는, "장바구니 보기" 페이지의 히든 폼 필드에 이 정보를 가지고 있고 폼이 섭밋 될때 그 정보가 업데이트 함수으로 잘 전달 되도록 만드는 것 말고는 "rod ID"에 대해서 염려하지 않아도 됩니다. 더 많은 정보를 위해서는 위에 있는 "장바구니 보기" 페이지 구조를 검토해주세요. 

장바구니 함수 설명 Function Reference

Page 204: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->cart->insert();

위에 개요된것처럼, 아이템들을 장바구니에 추가할수 있게 해줍니다.

$this->cart->update();

위에 개요된것처럼, 장바구니에 있는 아이템들을 업데이트 할수있게 해줍니다.

$this->cart->total();

장바구니에 있는 상품의 총 가격을 출력합니다.

$this->cart->total_items();

장바구니에 있는 아이템의 갯수를 출력합니다.

$this->cart->contents();

장바구니에 있는 모든것을 포함한 배열을 리턴합니다

$this->cart->has_options(rowid);

장바구니에 특정 row 가 옵션들을 포함하고있으면 TRUE 를 리턴합니다. 이 함수는 위의 장바구니 출력 예제에서 보이는것과 같이, 이 함수에 rowid 를 건내줘야 하기때문에 $this->cart->contents() 함수를 사용한 룹 안에서 사용되게끔 되어있습니다.

$this->cart->product_options(rowid);

특정 상품의 옵션들을 배열로 리턴합니다. 이 함수는 위의 장바구니 출력 예제에서 보이는것과 같이, 이 함수에 rowid 를 건내줘야 하기때문에 $this->cart->contents() 함수를 사용한 룹 안에서 사용되게끔 되어있습니다.

$this->cart->destroy();

장바구니를 삭제하도록 해줍니다. 이 함수는 보통 당신이 구매자의 주문 처리를 끝냈을 경우 쓰여집니다.

마이그레이션(Migration) 클래스

Page 205: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

마이그레이션을 통해서 쉽고 안정적으로 데이터베이스를 변경(alter) 할 수 있습니다. 수작업으로 sql 을 만들 수도 있지만, 그럴경우 어떤것이 변경되었는지 ,다음 배포때는 어떤것이 수행되어야하는지, 기억하고 있어야 합니다.

데이터베이스 테이블 마이그레이션은 어떤 마이그레이션이 수행되었는지 지속적으로 추적해 주기 때문에, 개발자는 단지 프로그램 파일을 업데이트 하고 $this->migrate->current() 만 호출하면,배포에 필요한 마이그레이션이 수행됩니다.현재버전은 config/migration.php 에 있습니다.

마이그레이션 생성

블로그를 포함하고 있는 새 사이트의 첫번째 마이그레이션 일 경우입니다. 모든 마이그레이션은 application/migrations/ 으로 들어가며, 이름은 001_add_blog.php 와 같은 형태가 됩니다.

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

public function up()

{

$this->dbforge->add_field(array(

'blog_id' => array(

'type' => 'INT',

'constraint' => 5,

'unsigned' => TRUE,

'auto_increment' => TRUE

),

'blog_title' => array(

'type' => 'VARCHAR',

'constraint' => '100',

),

'blog_description' => array(

'type' => 'TEXT',

'null' => TRUE,

),

Page 206: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

));

$this->dbforge->create_table('blog');

}

public function down()

{

$this->dbforge->drop_table('blog');

}

그리고 application/config/migration.php 에서 $config['migration_version'] = 1;으로 설정합니다.

사용예

예제에서 사용되는 코드는 application/controllers/migrate.php 에 있으며 스키마를 업데이트 합니다.

$this->load->library('migration');

if ( ! $this->migration->current())

{

show_error($this->migration->error_string());

}

함수 레퍼런스

$this->migration->current()

application/config/migration.php 에 있는 $config['migration_version'] 에 설정된 현재버전

$this->migration->latest()

current() 와 거의 유사하게 동작하나, $config['migration_version']를 참조하는 대신, 파일 시스템에 있는 가장 최근의 마이그레이션을 사용합니다.

Page 207: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$this->migration->version()

특정버전으로 롤백하거나, 이후 버전으로 바꿀 때 사용합니다. current 와 유사하게 동작하나$config['migration_version']를 사용하지 않습니다.

$this->load->library('migration');

$this->migration->version(5);

마이그레이션 참조

마이그레이션 설정 옵션

설정 기본값 옵션 설명

migration_enabled FALSE TRUE / FALSE 마이그레이션 사용/비사용 설정

migration_version 0 None 데이터베이스가 사용하고 있는 현재버전

migration_path APPPATH.'migrations/' None 마이그레이션 폴더의 경로

언어 Language Class언어 클래스는 국제화를 위해서 언어파일에서 데이터를 추출하여 텍스트를 채워넣습니다.

CodeIgniter 의 system 폴더안에 있는 language 폴더에는 언어파일 셋이 있습니다. 여러분이 직접 언어 파일을 만들어서 에러메세지등을 다른 언어로 표시하게 할수 있습니다.

언어파일은 일반적으로 system/language 디렉토리에 저장됩니다. 다른방법으로 application 폴더안에 language 폴더를 만든후 언어파일을 저장할수도 있습니다. CodeIgniter 는 application/language 디렉토리를 먼저 찾아볼 것입니다. 만약 디렉토리가 존재하지 않거나, 지정된 언어가 거기에 없다면 CI 는 system/language 폴더를 뒤져봅니다.

참고:  각 언어파일은 각 언어 폴더안에 위치해야합니다. 예를들어, 영어(english)는 다음 폴더에 위치합니다: system/language/english

언어파일 생성 Creating Language Files

언어파일은 _lang.php 라는 접미어와 확장자를 갖습니다. 예를들어, 에러메세지를 포함한 파일을 만든다고 합시다. 그파일이름은 다음과 같겠지요: error_lang.php언어파일안에서는 데이터는 아래 예제와 같이 $lang 라는 배열안에 한줄씩 추가해줍니다. :

Page 208: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

$lang['language_key'] = "The actual message to be shown";

참고: 특정파일안에서 공통적으로 사용하는 접두어를 배열 키에 지정하는것이 좋습니다. 그렇게하면 같은 이름을 가진것이 다른파일에 있다고 해도 충돌할 염려가 없습니다. 예를들어 , 아래와같이 에러메세지를 추가할때 error_ 접두어를 붙이면 좋습니다.

$lang['error_email_missing'] = "You must submit an email address";

$lang['error_url_missing'] = "You must submit a URL";

$lang['error_username_missing'] = "You must submit a username";

언어파일 로드 Loading A Language File

특정파일의 한줄을 가져오고싶다면, 파일을 먼저 로드해야합니다. 언어파일은 다음과같이 로드합니다:

$this->lang->load('filename', 'language');

filename 은 로드하고자하는 파일이름이며 확장자는 붙이지 않습니다, 그리고 language 는 포함하고 있는 언어셋입니다(예, english). 두번째 파라미터를 빠뜨린다면, application/config/config.php 에 설정되어 있는 기본언어파일이 로드 됩니다.

텍스트 한줄 가져오기 Fetching a Line of Text

언어파일이 로드된후 ,다음 함수를 이용하여 한줄의 텍스트를 가져올수 있습니다:

$this->lang->line('language_key');

language_key 는 가져오고자 하는 줄의 배열키 입니다.

참고: 이 함수는 한줄을 리턴하며, 화면에 출력하지는 않습니다.

언어파일로 폼 레이블 입히기 Using language lines as form labels

이 기능은 언어 라이브러리에서 더이상 사용하지않으며 언어헬퍼(Language helper) 의 lang() 함수로 옮겨졌습니다.

Page 209: Form Validation : CodeIgniter User Guide  · Web viewCodeIgniter 는 라이브러리,헬퍼,모델을 프로그램이 작동할때 자동으로 로드하는 기능을 지원합니다

언어 자동로드 Auto-loading Languages

특정 언어를 전역적으로 사용해야한다면, 시스템이 초기화 될때 CodeIgniter 에서 자동로드(auto-load) 하도록 할수 있습니다. application/config/autoload.php 파일을 열어서 autoload 배열에 language(s) 를 추가하시면 됩니다.