2.2.x 에서 3.0.x 로 업그레이드

업데이트를 수행하기 전에 index.php 파일을 정적 파일로 교체하여 사이트를 오프라인 상태로 만들어야 합니다.

Step 1: CodeIgniter 파일 업데이트

system/ 디렉토리의 모든 파일과 폴더를 교체 하고 index.php 파일도 교체합니다. index.php에 수정 사항이 있다면 새 파일에 다시 적용해야 합니다.

중요

이전 system/ 디렉토리를 먼저 삭제한 후 새 것으로 교체해야 합니다. 단순한 복사-붙여넣기는 문제를 일으킬 수 있습니다.

참고

이 폴더에 사용자 정의 파일이 있는 경우, 먼저 복사본을 만들어 두세요.

Step 2: 클래스 파일명 업데이트

CodeIgniter 3.0부터 모든 클래스 파일명(라이브러리, 드라이버, 컨트롤러, 모델)은 첫 글자를 대문자로 시작하는 방식(Ucfirst)으로 명명해야 합니다.

예를 들어 다음과 같은 라이브러리 파일이 있다면:

application/libraries/mylibrary.php

다음과 같이 이름을 변경해야 합니다:

application/libraries/Mylibrary.php

드라이버 라이브러리와 CodeIgniter 자체 라이브러리 및 코어 클래스의 확장/오버라이드도 동일합니다.

application/libraries/MY_email.php application/core/MY_log.php

위 파일들은 각각 다음으로 이름을 변경해야 합니다:

application/libraries/MY_Email.php application/core/MY_Log.php

컨트롤러:

application/controllers/welcome.php -> application/controllers/Welcome.php

모델:

application/models/misc_model.php -> application/models/Misc_model.php

이는 디렉토리, 설정 파일, 뷰, 헬퍼, 훅 등에는 적용되지 않으며 클래스에만 적용됩니다.

클래스명은 Ucfirst 방식으로, 그 외 모든 것은 소문자로 작성하는 단순한 규칙을 따르면 됩니다.

Step 3: config/mimes.php 교체

이 설정 파일이 더 많은 사용자 MIME 타입을 포함하도록 업데이트되었습니다. application/config/mimes.php 로 복사하세요.

Step 4: config/autoload.php 에서 $autoload[‘core’] 제거

$autoload['core'] 설정 배열은 CodeIgniter 1.4.1부터 더 이상 사용되지 않으며 이제 완전히 제거되었습니다. 해당 항목이 있다면 $autoload['libraries'] 로 이동하세요.

Step 5: Log 클래스 오버라이드 또는 확장 이동

Log 클래스는 이제 “코어” 클래스로 간주되어 system/core/ 디렉토리에 위치합니다. Log 클래스 오버라이드 또는 확장이 동작하려면 application/core/ 로 이동해야 합니다:

application/libraries/Log.php -> application/core/Log.php application/libraries/MY_Log.php -> application/core/MY_Log.php

Step 6: Session 라이브러리 사용 업데이트

Session 라이브러리 가 CodeIgniter 3에서 완전히 재작성되어 새로운 기능이 추가되었지만, 변경해야 할 사항들도 있습니다…

가장 주목할 점은 라이브러리가 이제 (암호화된) 쿠키에 항상 의존하는 대신 별도의 저장소 드라이버를 사용한다는 것입니다. 실제로 쿠키 저장 방식은 제거되었으며, 기본 옵션인 파일 시스템을 포함하여 항상 서버 측 저장소를 사용해야 합니다.

Session 클래스는 이제 PHP의 커스텀 세션 핸들러 메커니즘을 활용하며, 세션 데이터를 $_SESSION 수퍼글로벌을 통해 접근할 수 있습니다 (이전처럼 “userdata”로도 계속 사용 가능).

일부 설정 옵션이 제거되고 새로운 것들이 추가되었습니다. 자세한 내용은 Session 라이브러리 매뉴얼 을 읽어보시고, 변경해야 할 사항은 아래를 참고하세요:

  • $config['sess_driver'] 값 설정

    기본값은 ‘files’이지만, 이전에 $config['sess_use_database'] 를 사용했다면 ‘database’로 설정됩니다.

  • $config['sess_save_path'] 값 설정

    ‘database’ 드라이버는 $config['sess_table_name'] 으로 폴백되지만, 그 외에는 선택한 드라이버의 매뉴얼을 읽어야 합니다.

  • ci_sessions 테이블 업데이트 (‘database’ 드라이버만 해당)

    테이블 구조가 일부 변경되었습니다:

    • session_id 필드가 id 로 이름 변경

    • user_agent 필드 삭제

    • user_data 필드가 data 로 이름 변경되고, MySQL에서는 BLOB 타입으로 변경

    • last_activity 필드가 timestamp 로 이름 변경

    테이블 인덱스도 일부 변경되었으므로, 자세한 내용은 Session Database Driver 매뉴얼을 참고하세요.

    중요

    현재 MySQL과 PostgreSQL만 공식 지원됩니다. 다른 데이터베이스도 동작할 수 있지만, advisory locking 기능이 없어 동시 요청에 안전하지 않으므로 다른 드라이버 사용을 고려하세요.

  • $config['sess_match_useragent'] 제거

    user-agent 문자열은 사용자 브라우저가 제공하는 입력, 즉 클라이언트 측 입력입니다. 따라서 비효율적인 기능이므로 제거되었습니다.

  • $config['sess_encrypt_cookie'] 제거

    앞서 언급했듯이 라이브러리가 더 이상 쿠키를 저장 방식으로 사용하지 않으므로 이 옵션은 의미가 없습니다.

  • $config['sess_expire_on_close'] 제거

    이 옵션은 하위 호환성을 위해 여전히 사용 가능하지만, 그 외에는 제거해야 합니다. $config['sess_expiration'] 을 0으로 설정하면 동일한 효과를 얻을 수 있습니다.

  • “flashdata”와 “userdata” 충돌 확인

    Flashdata는 이제 단순히 다음 요청에서 삭제 표시가 된 일반 “userdata”입니다. 즉, 같은 이름의 “userdata”와 “flashdata”를 동시에 가질 수 없습니다.

  • 세션 메타데이터 사용 확인

    이전에는 ‘session_id’, ‘ip_address’, ‘user_agent’, ‘last_activity’ 메타데이터 항목을 userdata로 접근할 수 있었습니다. 이제는 불가능하므로, 이 값들에 의존하는 애플리케이션은 Session Metadata 를 참고하세요.

  • unset_userdata() 사용 확인

    이전에는 여러 키를 해제하기 위해 'key' => 'dummy value' 형식의 연관 배열을 받았습니다. 이제는 키만 배열의 요소로 전달해야 합니다.

    // 이전
    $this->session->unset_userdata(array('item' => '', 'item2' => ''));
    
    // 이후
    $this->session->unset_userdata(array('item', 'item2'));
    

Session 확장을 작성한 경우 application/libraries/Session/ 디렉토리로 이동해야 하며, 리팩터링도 필요할 수 있습니다.

Step 7: config/database.php 업데이트

3.0.0에서 Active Record가 Query Builder로 이름이 변경되어, config/database.php 에서 $active_record 변수를 $query_builder 로 이름을 변경해야 합니다:

$active_group = 'default';
// $active_record = TRUE;
$query_builder = TRUE;

Step 8: 오류 템플릿 교체

CodeIgniter 3.0에서 오류 템플릿은 이제 뷰로 간주되어 application/views/errors 디렉토리로 이동했습니다.

또한 HTML과 달리 커맨드 라인에 적합한 일반 텍스트 형식의 CLI 오류 템플릿 지원이 추가되었습니다.

이전 템플릿을 application/errors 에서 application/views/errors/html 로 이동하면 되지만, CodeIgniter 아카이브에서 새 application/views/errors/cli 디렉토리를 복사해야 합니다.

Step 9: config/routes.php 파일 업데이트

:any 를 포함하는 라우트

CodeIgniter는 항상 URI 세그먼트 의 모든 문자를 매칭하기 위한 :any 와일드카드를 라우팅에 제공해 왔습니다.

그러나 :any 와일드카드는 실제로 .+ 로 실행되는 정규 표현식의 별칭으로, URI 세그먼트 구분자인 / (슬래시)도 매칭합니다. 이는 의도하지 않은 버그입니다.

CodeIgniter 3에서 :any 와일드카드는 [^/]+ 를 나타내어 슬래시를 매칭하지 않습니다.

이 버그를 실제 기능으로 활용한 개발자라면 슬래시를 매칭하기 위해 .+ 정규 표현식을 사용하세요:

(.+)    // 모든 것을 매칭
(:any)  // '/' 를 제외한 모든 문자를 매칭

디렉토리와 ‘default_controller’, ‘404_override’

$route['default_controller']$route['404_override'] 설정은 컨트롤러 이름뿐만 아니라 controller/method 쌍도 받아들입니다. 그러나 라우팅 로직의 버그로 일부 사용자들이 이를 directory/controller 로 사용할 수 있었습니다.

이 동작은 의도하지 않은 것이었으며, CodeIgniter 3.0에서 애플리케이션이 동작하지 않을 수 있습니다.

버전 3의 또 다른 변경점은 ‘default_controller’와 ‘404_override’가 이제 디렉토리별 로 적용된다는 것입니다. 예를 들어:

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

웹사이트가 example.com 에 있다면, 사용자가 http://example.com/ 을 방문할 때 ‘Main’ 컨트롤러가 로드됩니다. 그런데 application/controllers/admin/ 디렉토리가 있고 사용자가 http://example.com/admin/ 을 방문하면, CodeIgniter 3에서는 admin/ 디렉토리 아래에서도 ‘Main’ 컨트롤러를 찾습니다. 찾지 못하면 404가 발생합니다.

‘404_override’ 설정도 동일한 규칙이 적용됩니다.

Step 10: 존재하지 않는 항목에 대해 FALSE 대신 NULL을 반환하는 함수들

많은 메서드와 함수가 요청한 항목이 없을 때 이제 FALSE 대신 NULL을 반환합니다:

Step 11: XSS 필터링 사용 확인

CodeIgniter의 많은 함수가 불리언 파라미터를 전달하여 XSS 필터링 기능을 사용할 수 있도록 합니다. 해당 파라미터의 기본값이 이전에는 FALSE였지만, 이제 NULL로 변경되어 $config['global_xss_filtering'] 값에 따라 동적으로 결정됩니다.

$xss_filter 파라미터에 수동으로 불리언 값을 전달했거나 $config['global_xss_filtering'] 을 항상 FALSE로 설정했다면 이 변경은 해당 없습니다.

그렇지 않다면 다음 함수들의 사용을 검토하세요:

중요

관련 변경으로, $_GET, $_POST, $_COOKIE, $_SERVER 수퍼글로벌은 전역 XSS 필터링이 활성화되어 있을 때 더 이상 자동으로 덮어써지지 않습니다.

Step 12: URI의 잠재적 XSS 문제 확인

URI 라이브러리 는 이전에 URI 세그먼트에서 특정 “프로그래밍 문자”를 자동으로 HTML 엔티티로 변환했습니다.

이는 $config['permitted_uri_chars'] 설정 외에 자동 XSS 보호를 제공하기 위한 것이었지만 문제가 있어 CodeIgniter 3.0에서 제거되었습니다.

이 기능에 의존했다면 URI 세그먼트를 출력할 때 $this->security->xss_clean() 으로 필터링하도록 애플리케이션을 업데이트해야 합니다.

Step 13: ‘xss_clean’ Form validation 규칙 사용 확인

XSS 정리에 관한 잘 알려지지 않은 규칙은 입력 데이터가 아닌 출력에만 적용 해야 한다는 것입니다.

자동 및 전역 XSS 정리 기능에서 이 실수를 했으므로(위 XSS 관련 단계 참고), 이제 그 관행을 막기 위해 ‘xss_clean’을 form validation 의 공식 지원 규칙 목록에서 제거합니다.

Form Validation 라이브러리 는 일반적으로 입력 데이터를 검증하므로 ‘xss_clean’ 규칙은 적합하지 않습니다.

이 규칙이 꼭 필요하다면 Security 헬퍼 를 로드하세요. 이 헬퍼에는 일반 함수로서 xss_clean() 이 포함되어 validation 규칙으로도 사용할 수 있습니다.

Step 14: Input 클래스의 get_post() 메서드 사용 업데이트

이전에 Input 클래스get_post() 메서드는 POST 데이터를 먼저 검색한 후 GET 데이터를 검색했습니다. 이름이 나타내는 것처럼 GET을 먼저 검색하도록 수정되었습니다.

이전 get_post() 처럼 POST를 먼저 검색하는 post_get() 메서드가 추가되었습니다.

Step 15: Directory 헬퍼의 directory_map() 함수 사용 업데이트

결과 배열에서 이제 디렉토리는 후행 디렉토리 구분자(일반적으로 슬래시)로 끝납니다.

Step 16: Database Forge의 drop_table() 메서드 사용 업데이트

지금까지 drop_table() 은 기본적으로 IF EXISTS 절을 추가하거나, 일부 드라이버에서는 아예 작동하지 않았습니다. CodeIgniter 3.0에서는 IF EXISTS 조건이 기본적으로 추가되지 않으며, 기본값이 FALSE인 선택적 두 번째 파라미터로 대신 허용합니다.

IF EXISTS에 의존했다면 사용 방식을 변경해야 합니다:

// 이제 DROP TABLE `table_name` 만 생성
$this->dbforge->drop_table('table_name');

// DROP TABLE IF EXISTS `table_name` 생성
$this->dbforge->drop_table('table_name', TRUE);

참고

위 예제는 MySQL 특유의 문법이지만, ODBC를 제외한 모든 드라이버에서 작동합니다.

Step 17: 여러 이메일을 사용하는 Email 라이브러리 사용 변경

Email 라이브러리 는 이메일을 성공적으로 전송한 후 자동으로 설정된 파라미터를 초기화합니다. 이 동작을 재정의하려면 send() 메서드의 첫 번째 파라미터로 FALSE를 전달하세요:

if ($this->email->send(FALSE))
{
        // 파라미터가 초기화되지 않음
}

Step 18: Form_validation 언어 라인 업데이트

Form Validation 라이브러리언어 파일과 오류 메시지 형식에 두 가지 개선이 있었습니다:

  • Language 라이브러리 라인 키는 이제 충돌을 피하기 위해 form_validation_ 접두사가 필요합니다:

    // 이전
    $lang['rule'] = ...
    
    // 이후
    $lang['form_validation_rule'] = ...
    
  • 오류 메시지 형식이 sprintf() 보다 유연한 이름 파라미터를 사용하도록 변경되었습니다:

    // 이전
    'The %s field does not match the %s field.'
    
    // 이후
    'The {field} field does not match the {param} field.'
    

참고

이전 형식도 여전히 작동하지만, 접두사 없는 라인 키는 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다. 가능한 빨리 업데이트하세요.

Step 19: ‘base_url’ 설정값이 비어있지 않은지 확인

$config['base_url'] 이 설정되지 않으면 CodeIgniter가 웹사이트의 기본 URL을 자동으로 감지하려 합니다. 이는 새 애플리케이션 개발 시작 시 편의를 위한 것뿐입니다.

자동 감지는 신뢰할 수 없으며 보안 취약점이 있으므로 항상 수동으로 설정해야 합니다!

자세한 내용은 Step 2 of Upgrading from 3.0.2 to 3.0.3 를 참고하세요.

Step 20: 이전에 더 이상 사용되지 않던 기능 제거

$autoload['core'] 설정 외에도 CodeIgniter 3.0.0에서 제거된 기능들이 있습니다:

SHA1 라이브러리

이전에 더 이상 사용되지 않던 SHA1 라이브러리가 제거되었습니다. SHA1 해시를 생성하려면 PHP의 네이티브 sha1() 함수를 사용하세요. Encrypt 라이브러리sha1() 메서드도 제거되었습니다.

EXT 상수

PHP 4 지원이 종료된 이후 EXT 상수 사용은 더 이상 사용되지 않았습니다. 이제 다른 파일명 확장자를 유지할 필요가 없으며, 이 버전에서 EXT 상수가 제거되었습니다. 대신 ‘.php’를 직접 사용하세요.

Smiley 헬퍼

Smiley 헬퍼 는 EllisLab의 ExpressionEngine 제품의 레거시 기능입니다. CodeIgniter와 같은 범용 프레임워크에는 너무 특화된 기능이므로 이제 더 이상 사용되지 않습니다.

또한 이전에 더 이상 사용되지 않던 js_insert_smiley() (버전 1.7.2부터)도 이제 제거되었습니다.

Encrypt 라이브러리

다수의 취약점 보고에 따라 Encrypt 라이브러리 가 더 이상 사용되지 않으며, 새로운 Encryption 라이브러리 가 대체합니다.

새 라이브러리는 MCrypt 확장 (및 /dev/urandom)이나 PHP 5.3.3 및 OpenSSL 확장 이 필요합니다.

참고

Encrypt 라이브러리 는 하위 호환성을 위해 여전히 사용 가능합니다.

중요

가능한 빨리 새 Encryption 라이브러리 로 전환하는 것을 강력히 권장합니다!

Cart 라이브러리

Cart 라이브러리Smiley 헬퍼 처럼 CodeIgniter에 너무 특화되어 있습니다. 이제 더 이상 사용되지 않으며 CodeIgniter 3.1+에서 제거될 예정입니다.

참고

라이브러리는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

‘mysql’, ‘sqlite’, ‘mssql’, ‘pdo/dblib’ 데이터베이스 드라이버

mysql 드라이버는 오래된 코드 베이스로 알려진 구식 ‘mysql’ PHP 확장을 사용합니다. 이 확장은 PHP 5.5부터 더 이상 사용되지 않으며, CodeIgniter는 3.0 버전에서 기본 MySQL 드라이버를 mysqli 로 변경합니다.

MySQL을 위해 ‘mysqli’ 또는 ‘pdo/mysql’ 드라이버를 사용하세요. 구식 ‘mysql’ 드라이버는 향후 제거될 예정입니다.

sqlite, mssql, pdo/dblib 드라이버는 PHP 5.3 이후 더 이상 존재하지 않는 PHP 확장에 의존합니다.

따라서 이 드라이버들도 더 이상 사용되지 않으며 향후 제거될 예정입니다. 각각 sqlite3, sqlsrv, pdo/sqlsrv 드라이버로 전환하세요.

참고

이 드라이버들은 여전히 사용 가능하지만, 가능한 빨리 다른 것으로 전환하는 것을 강력히 권장합니다.

Security 헬퍼 do_hash()

Security 헬퍼 함수 do_hash() 는 이제 PHP의 네이티브 hash() 함수의 별칭입니다. CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

함수는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

$config[‘global_xss_filtering’] 설정

위에서 설명한 것처럼 XSS 필터링은 입력이 아닌 출력에 적용해야 합니다. 따라서 입력 데이터를 자동으로 필터링하는 $config['global_xss_filtering'] 은 나쁜 방식으로 간주되어 이제 더 이상 사용되지 않습니다.

대신 출력 시 xss_clean() 함수를 통해 사용자 제공 데이터를 수동으로 이스케이프하거나, HTML Purifier 같은 라이브러리를 사용하세요.

참고

설정은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

File 헬퍼 read_file()

File 헬퍼 함수 read_file() 은 이제 PHP의 네이티브 file_get_contents() 함수의 별칭입니다. CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

함수는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

String 헬퍼 repeater()

String 헬퍼 함수 repeater() 는 이제 PHP의 네이티브 str_repeat() 함수의 별칭입니다. CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

함수는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

String 헬퍼 trim_slashes()

String 헬퍼 함수 trim_slashes() 는 이제 PHP의 네이티브 trim() 함수(슬래시를 두 번째 인수로 사용)의 별칭입니다. CodeIgniter 3.1+에서 제거 예정입니다.

참고

함수는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Form 헬퍼 form_prep()

Form 헬퍼 함수 form_prep() 은 이제 공통 함수 html_escape() 의 별칭입니다. 더 이상 사용되지 않으며 향후 제거될 예정입니다.

html_escape() 를 대신 사용하세요.

참고

함수는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Email 헬퍼 함수

Email 헬퍼 에는 두 함수만 있습니다:

  • valid_email()

  • send_email()

두 함수 모두 PHP의 네이티브 filter_var()mail() 함수의 별칭이므로, Email 헬퍼 전체가 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

함수들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Date 헬퍼 standard_date()

Date 헬퍼 함수 standard_date()date() 와 함께 사용하면 동일한 기능을 제공하는 PHP 네이티브 상수 를 사용할 수 있어 더 이상 사용되지 않습니다:

// 이전 방식
standard_date(); // 기본값 standard_date('DATE_RFC822', now());

// 대체
date(DATE_RFC822, now());

// 이전 방식
standard_date('DATE_ATOM', $time);

// 대체
date(DATE_ATOM, $time);

참고

함수는 여전히 사용 가능하지만, CodeIgniter 3.1+에서 제거 예정으로 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

HTML 헬퍼 nbs(), br()

HTML 헬퍼 함수 nbs()br() 은 각각 &nbsp;<br > 를 사용하는 네이티브 str_repeat() 함수의 별칭입니다.

PHP 네이티브 함수를 단순히 별칭하는 것은 의미가 없으므로 더 이상 사용되지 않으며 CodeIgniter 3.1+에서 제거 예정입니다.

참고

함수들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Pagination 라이브러리 ‘anchor_class’ 설정

Pagination 라이브러리 는 이제 ‘attributes’ 설정을 통해 앵커에 거의 모든 HTML 속성을 추가할 수 있습니다. ‘class’ 속성을 전달하는 것도 포함되므로 별도의 ‘anchor_class’ 설정은 더 이상 의미가 없습니다. 따라서 ‘anchor_class’ 설정은 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

설정은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

String 헬퍼 random_string() 타입 ‘unique’ 와 ‘encrypt’

String 헬퍼 함수 random_string() 사용 시 uniqueencrypt 난수화 타입은 더 이상 사용하지 마세요. 각각 md5sha1 의 별칭이며 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

이 옵션들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

URL 헬퍼 url_title() 구분자 ‘dash’ 와 ‘underscore’

URL 헬퍼 함수 url_title() 사용 시 단어 구분자로 dashunderscore 를 전달하지 마세요. 이 함수는 이제 모든 문자를 받아들이므로 원하는 문자를 직접 전달하세요. ‘dash’ 대신 ‘-’, ‘underscore’ 대신 ‘_’을 사용하세요.

dashunderscore 는 별칭으로 남아있지만 CodeIgniter 3.1+에서 제거 예정입니다.

참고

이 옵션들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Session 라이브러리 all_userdata() 메서드

Session 라이브러리userdata() 메서드는 이제 파라미터를 생략하여 모든 userdata를 가져올 수 있습니다:

$this->session->userdata();

이로 인해 all_userdata() 메서드가 불필요해져 위 사용법의 userdata() 별칭이 되었으며 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

메서드는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

AFTER 절을 사용하는 Database Forge add_column() 메서드

Database Forge 메서드 add_column()세 번째 파라미터 를 AFTER 절을 위해 사용했다면 변경해야 합니다.

해당 세 번째 파라미터는 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다. 이제 AFTER 절 필드명을 필드 정의 배열에 넣어야 합니다:

// 이전 사용법:
$field = array(
        'new_field' => array('type' => 'TEXT')
);

$this->dbforge->add_column('table_name', $field, 'another_field');

// 새 사용법:
$field = array(
        'new_field' => array('type' => 'TEXT', 'after' => 'another_field')
);

$this->dbforge->add_column('table_name', $field);

참고

파라미터는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

참고

MySQL과 CUBRID 데이터베이스만 해당됩니다! 다른 드라이버는 이 절을 지원하지 않으며 무시합니다.

URI Routing 메서드 fetch_directory(), fetch_class(), fetch_method()

CI_Router::$directory, CI_Router::$class, CI_Router::$method 속성이 public이고 각 fetch_*() 메서드가 단순히 속성을 반환하는 것 외에 아무것도 하지 않으므로 유지할 이유가 없습니다.

내부적이고 문서화되지 않은 메서드들이지만, 하위 호환성을 위해 더 이상 사용되지 않는 것으로 표시합니다. 사용했다면 이제 속성에 직접 접근하세요:

$this->router->directory;
$this->router->class;
$this->router->method;

참고

메서드들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Input 라이브러리 is_cli_request() 메서드

CI_Input::is_cli_request() 는 CodeIgniter 내부의 많은 곳에서 필요하며, 종종 Input 라이브러리 가 로드되기 전에 사용됩니다. 따라서 is_cli() 라는 공통 함수로 대체되며 이 메서드는 이제 별칭이 됩니다.

새 함수는 항상 사용 가능하고 타이핑도 더 짧습니다:

// 이전
$this->input->is_cli_request();

// 이후
is_cli();

CI_Input::is_cli_request() 는 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

메서드는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Config 라이브러리 system_url() 메서드

CI_Config::system_url() 사용은 보안에 취약한 코딩 방식을 권장합니다. 보안 관점에서 CodeIgniter의 system/ 디렉토리는 공개적으로 접근 가능해서는 안 됩니다.

따라서 이 메서드는 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

메서드는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Javascript 라이브러리

Javascript 라이브러리 는 항상 ‘실험적’ 상태였으며 실제로 유용하거나 적절한 솔루션이 아니었습니다.

이제 더 이상 사용되지 않으며 CodeIgniter 3.1+에서 제거 예정입니다.

참고

라이브러리는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Form Validation prep_for_form() 메서드

Form Validation 라이브러리prep_for_form() 메서드는 set_rules() 에서 입력 데이터에 HTML 인코딩을 자동으로 수행하는 규칙으로도 사용 가능합니다.

출력 대신 입력 데이터를 자동으로 인코딩하는 것은 나쁜 방식이며, CodeIgniter와 PHP는 대안을 제공합니다.

따라서 prep_for_form 메서드/규칙은 사실상 불필요하며 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.

참고

메서드는 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.

Step 21: Text 헬퍼 highlight_phrase() 사용 확인

Text 헬퍼 함수 highlight_phrase() 의 기본 HTML 태그가 <strong> 에서 새 HTML5 태그 <mark> 로 변경되었습니다.

직접 강조 태그를 사용하지 않았다면 Internet Explorer 8과 같은 구형 브라우저를 사용하는 방문자에게 문제가 발생할 수 있습니다. 구형 브라우저 호환성을 위해 CSS 파일에 다음 코드를 추가하는 것을 권장합니다:

mark {
        background: #ff0;
        color: #000;
};