'codeIgniter'에 해당하는 글 22건


1. ENVIRONMENT 상수

환경을 설정은 로깅 및 오류보고 등에 영향을 미칩니다.
기본적으로 CodeIgniter는 index.php 파일 상단에 development에 대한 환경 상수 설정이 제공됩니다.

define('ENVIRONMENT', 'development');
// 1. development
// 2. testing
// 3. production


2. Security

CodeIgniter는 악의적인 데이터가 어플리케이션에 전달될 수 가능성을 최소화하기 위하여,
허용하는 URI 문자열이 매우 제한적이며, URI는 다음만을 포함할 수 있습니다.

  • Alpha-numeric text
  • Tilde: ~
  • Period: .
  • Colon: :
  • Underscore: _
  • Dash: -

Register_globals
시스템이 초기화 되는 동안 $_GET, $_POST, $_COOKIE 배열을 제외한 모든 글로벌 변수들은 해제(unset)됩니다.
해제되는 것은 register_globals = off 와 동일합니다.

error_reporting
production 환경에서는 내부 error_reporting 값을 0으로 지정하여 PHP의 에러 리포팅을 비활성화 하는 것이 보안상 바람직합니다.

magic_quotes_runtime
이 지시어는 시스템이 초기화 되는 동안 off 되므로, 데이터베이스에서 데이터를 검색할 때 슬래시를 제거하지 말아야 합니다.


3. Best Practices

POST 데이터, COOKIE 데이터, URI 데이터, XML-RPC 데이터, SERVER 배열 데이터 등으로부터 어플리케이션으로 데이터를 받기 전에 3단계의 과정을 거치기를 권장합니다.
  1. 변질된 데이터를 필터합니다. (Security class)
  2. 올바른 타입, 길이, 크기 등에 따라 데이터를 검증하며 1단계를 대신할 때도 있습니니다.(Form Validation class)
  3. 데이터베이스에 데이터가 전달되기 전에 이스케이프 합니다. (Queries class)


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

CodeIgniter의 템플릿 엔진을 활용하지 않는다면, View 파일에 순수 PHP를 사용하게 될 것입니다.
View 파일에서 PHP 코드를 최소화하려면 코드 블럭에 PHP 대체 문법, 단축 태그 등을 사용하길 권장합니다.
이 문법에 친숙하지 않다면, 코드에서 중괄호와 echo 구문을 제거하도록 합니다.


제어 구조 대체

if, for, foreach, while 같은 제어 구조는 더 간단한 형식으로 쓰여질 수 있습니다.
<ul>
    <?php foreach ($todo as $item): ?>
    <li><?=$item?></li>
    <?php endforeach; ?>
</ul>

중괄호가 없으며 마지막 중괄호는 endforeach 로 대체됩니다.
제어 구조의 간단한 마지막 문법입니다: endif, endfor, endforeach, endwhile.
각 구문의 뒤에는 콜론을 사용하며 마지막에는 세미콜론을 사용합니다.

if/elseif/else 를 사용하는 다른 예제입니다.
<?php if ($username == 'sally'): ?>
   <h3>Hi Sally</h3>
<?php elseif ($username == 'joe'): ?>
   <h3>Hi Joe</h3>
<?php else: ?>
   <h3>Hi unknown user</h3>
<?php endif; ?>

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

기본적으로 application 디렉토리에 빌드될 단일 어플리케이션을 관리하기 위해 CodeIgniter 를 사용사용합니다.
하지만 한번의 CodeIgniter 설치로 다중 어플리케이션을 관리하거나, application 디렉토리 이름 변경도 가능합니다.

application 경로/이름 변경은 index.php 파일에서 할 수 있습니다.

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


다중 어플리케이션

여러 다른 어플리케이션을 관리하려면, 각 어플리케이션을 application 디렉토리 안에 서브 디렉토리로 위치하면 됩니다.
예를 들어 "foo" 와 "bar" 를 생성한다면, 다음의 디렉토리와 구조를 가질 것입니다.

applications/foo/
applications/foo/config/
applications/foo/controllers/
applications/foo/errors/
applications/foo/libraries/
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/

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Profiler 클래스는 벤치마크 결과, 실행한 쿼리, $_POST 데이터를 페이지 하단에 보여줄 것입니다.
이 정보는 개발하는 동안 디버깅과 최적화에 유용하게 사용할 수 있습니다.
Profiler 클래스는 Output Class로부터 자동으로 로드되므로 최기화가 필요없고, 원하는 Controller 함수에 삽입합니다.

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

벤치마크 데이터를 컴파일하고 보여주기 위해서 특정 문법을 사용하여 벤치마크 포인트를 지정해야 합니다.
Profiler 섹션 설정은 두 가지 방법으로 가능합니다.

$ vi application/config/profiler.php
$config['config'] = FALSE;
$config['queries'] = FALSE;

$ vi application/controller/user_controller.php
$sections = array(
    'config' => TRUE,
    'queries' => TRUE
    );
$this->output->set_profiler_sections($sections);


사용 가능한 섹션에 접근 가능한 배열의 키.

  • benchmarks : 벤치마크 포인트와 전체 실행의 경과 시간 (default: TRUE)
  • config : CodeIgniter 설정 변수 (default: TRUE)
  • controller_info : Controller 클래스와 메소드 (default: TRUE)
  • get : 요청에 전달된 GET 데이터 (default: TRUE)
  • http_headers : 요청에 대한 HTTP 헤더 (default: TRUE)
  • memory_usage : 요청에 할당된 메모리양(Bytes) (default: TRUE)
  • post : 요청에 전달된 POST 데이터 (default: TRUE)
  • queries : 실행 시간을 포함한 데이터베이스 쿼리 리스트 (default: TRUE)
  • uri_string : 현재 요청의 URI (default: TRUE)
  • query_toggle_count : 쿼리 블록의 기본값, 쿼리의 수 (default: 25)

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Caching

Programming/CodeIgniter 2011. 11. 12. 00:09

CodeIgniter 는 최고의 성능을 위해 페이지를 캐시합니다.
페이지가 처음 로드되면 application/cache 디렉토리에 기록되며 기한이 만료되면 삭제됩니다.
페이지 로딩 속도를 보여주는 Benchmark 태그는 캐시되지 않습니다.

캐시를 사용하려면 controller 함수에 다음 태그를 넣습니다.

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

n은 새로고쳐질 분(minute) 단위의 수로 입력합니다.

캐시 태그는 어떤 함수에서도 사용 가능하지만, 주로 출력을 생성하는 view를 가진 controller에서만 작동합니다.
캐시 사용시 application/cache 디렉토리에 쓰기 권한을 설정해야 합니다.
캐시 만료 전에 캐시를 삭제하고 싶을 때는 application/cache 디렉토리에서 직접 삭제합니다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,