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을 반환합니다:
config_item()
config->item()
config->slash_item()
input->get()
input->post()
input->get_post()
input->cookie()
input->server()
input->input_stream()
input->get_request_header()
session->userdata()
session->flashdata()
uri->segment()
uri->rsegment()
element()
elements()
Step 11: XSS 필터링 사용 확인¶
CodeIgniter의 많은 함수가 불리언 파라미터를 전달하여 XSS 필터링 기능을 사용할 수 있도록 합니다.
해당 파라미터의 기본값이 이전에는 FALSE였지만, 이제 NULL로 변경되어
$config['global_xss_filtering'] 값에 따라 동적으로 결정됩니다.
$xss_filter 파라미터에 수동으로 불리언 값을 전달했거나 $config['global_xss_filtering']
을 항상 FALSE로 설정했다면 이 변경은 해당 없습니다.
그렇지 않다면 다음 함수들의 사용을 검토하세요:
input->get()
input->post()
input->get_post()
input->cookie()
input->server()
input->input_stream()
중요
관련 변경으로, $_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() 은 각각 와
<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() 사용 시
unique 와 encrypt 난수화 타입은 더 이상 사용하지 마세요.
각각 md5 와 sha1 의 별칭이며 CodeIgniter 3.1+에서 제거 예정으로 더 이상 사용되지 않습니다.
참고
이 옵션들은 여전히 사용 가능하지만, 가능한 빨리 사용을 중단하는 것을 강력히 권장합니다.
URL 헬퍼 url_title() 구분자 ‘dash’ 와 ‘underscore’¶
URL 헬퍼 함수 url_title() 사용 시 단어 구분자로
dash 나 underscore 를 전달하지 마세요. 이 함수는 이제 모든 문자를 받아들이므로
원하는 문자를 직접 전달하세요. ‘dash’ 대신 ‘-’, ‘underscore’ 대신 ‘_’을 사용하세요.
dash 와 underscore 는 별칭으로 남아있지만 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;
};