PHP
| 패러다임 | 객체 지향 프로그래밍, 절차적 프로그래밍, 리플렉션 |
|---|---|
| 설계자 | 라스무스 러도프 |
| 개발자 | 젠드 테크놀로지스 |
| 발표일 | 1995년 6월 8일 |
| 최근 버전 | 8.5.5[1] |
| 최근 버전 출시일 | 2026년 4월 9일 |
| 미리보기 버전 | 8.5.0 alpha 1 |
| 미리보기 버전 출시일 | 2021년 7월 22일 |
| 라이선스 | PHP 라이선스 |
| 파일 확장자 | .php, .phtml, .php3, .php4, .php5, .php7, .phps |
| 웹사이트 | http://www.php.net/ |
| 주요 구현체 | |
| 젠드 엔진, HHVM, 팔라겔, 퀀스 | |
| 영향을 받은 언어 | |
| C, C++, 자바, 펄, Tcl | |
| 영향을 준 언어 | |
| 팰컨, 핵 | |
PHP(PHP: Hypertext Preprocessor: 하이퍼텍스트 프리프로세서[2])는 범용 프로그래밍 언어다. 원래는 'Personal Home Page'의 약자였다. 동적 웹 페이지를 만들기 위해 설계되었으며 이를 구현하기 위해 PHP로 작성된 코드를 PHP 엔진에서 html 파일과 같이 처리하여 작성자가 원하는 웹 페이지를 생성한다. 2015년 PHP 7.0이후에는 PHP 코드와 HTML을 별도 파일로 분리하여 작성하는 경우가 일반적이며, 웹서버로 사용시 php-fpm(PHP FastCGI Process Manager)을 통해 실행하는 경우가 많다. 또한 PHP는 명령 줄 인터페이스 방식의 자체 인터프리터를 제공하여 이를 통해 범용 프로그래밍 언어로도 사용할 수 있으며 그래픽 애플리케이션을 제작할 수도 있다.
많은 서버 측 오픈 소스 소프트웨어는 PHP로 구현되었다. PHP를 바탕으로 하는 프로그램 중 대표적인 예로 블로깅 도구 워드프레스와 위키백과를 구동시키는 미디어위키를 들 수 있다. 해외 유명 cms 로는 TYPO3, 줌라, phpBB 가 있다. 대한민국의 PHP 기반 BBS는 XpressEngine, 라이믹스 등이 있다.
PHP는 마이크로소프트의 ASP.NET, 비주얼 베이직, 오라클의 자바나 오픈 소스 커뮤니티의 파이썬, 펄, 루비에 대한 대안으로 생각될 수 있다.
PHP는 텍스트, 특히 HTML의 처리에 강점을 가지고 있다. URL의 파싱이나 폼 처리, 정규 표현식 등이 그 한 예이다. 또한 다양한 데이터베이스를 지원하므로 데이터베이스와 사용자간의 다리 역할도 잘 수행한다.
PHP는 PHP 사용 허가서의 규정을 따라 배포된 자유 소프트웨어이다. PHP 사용 허가서는 PHP라는 단어의 사용에 제한을 두는 규정을 가지고 있기 때문에 GNU 일반 공중 사용 허가서와 호환되지 않는다.
역사
[편집]PHP는 1995년 덴마크계 캐나다인 라스무스 러도프가 처음 만든 것으로, 당시 C언어나 Perl로 복잡하게 웹사이트를 만들던 CGI를 대신해 간편하게 웹사이트를 작성하기 위해 개발했다. 그 뒤로 젠드 사에서 PHP 의 성능을 가속할 수 있는 Zend 엔진이라는 옵티마이저를 개발했고 가상머신(VM)을 가진 범용프로그래밍 언어에 이르게 되었다.[3]
| 버전 | 출시일 | 지원 기한[4] |
|---|---|---|
| 1.0 | 1995년 6월 8일 | |
| 2.0 | 1997년 11월 1일 | |
| 3.0 | 1998년 6월 6일 | 2000년 10월 20일[4] |
| 4.0 | 2000년 5월 22일[5] | 2001년 6월 23일[4] |
| 4.1 | 2001년 12월 10일[6] | 2002년 3월 12일[4] |
| 4.2 | 2002년 4월 22일[7] | 2002년 9월 6일[4] |
| 4.3 | 2002년 12월 27일[8] | 2005년 3월 31일[4] |
| 4.4 | 2005년 7월 11일[9] | 2008년 8월 7일[4] |
| 5.0 | 2004년 7월 13일[10] | 2005년 9월 5일[4] |
| 5.1 | 2005년 11월 24일[11] | 2006년 8월 24일[4] |
| 5.2 | 2006년 11월 2일[12] | 2011년 1월 6일[4] |
| 5.3 | 2009년 6월 30일[13] | 2014년 8월 14일[4] |
| 5.4 | 2012년 3월 1일[14] | 2015년 9월 3일[4] |
| 5.5 | 2013년 6월 20일[15] | 2016년 7월 10일[16] |
| 5.6 | 2014년 8월 28일[17] | 2018년 12월 31일[16] |
| 6.x | 미출시 | 빈칸 |
| 7.0 | 2015년 12월 3일[18] | 2019년 1월 10일[19] |
| 7.1 | 2016년 12월 1일 | 2019년 12월 1일[16] |
| 7.2 | 2017년 11월 30일 | 2020년 11월 30일[16] |
| 7.3 | 2018년 12월 6일[20] | 2021년 12월 6일 |
| 7.4 | 2019년 11월 28일[21] | 2022년 11월 28일 |
| 8.0 | 2020년 11월 26일[22] | 2023년 11월 26일 |
| 8.1 | 2021년 11월 25일[23] | 2024년 11월 25일 |
| 8.2 | 2022년 12월 8일[24] | 2025년 12월 8일 |
| 8.3 | 2023년 11월 23일[25] | 2026년 11월 23일 |
범례: 오래된 버전 오래된 버전, 지원 중 최신 버전 배포 예정 | ||
PHP 1.0
[편집]1995년 6월 8일 발표. 라스무스 러도프가 C 언어로 작성한 PHP(Personal Home Page Tools) 인터프리터의 소스 코드를 공개한다.[26][27]
PHP Version 2 (PHP/FI)
[편집]1996년 4월 16일 발표. FI(Form Interpreter, SQL이 만든 DBMS 도구)가 통합되어 1997년에 PHP/FI2.0이 된다. 정식 명칭은 "Personal Home Page Construction Kit/Form Interpreter"이다.
PHP 3.0
[편집]1998년 6월 6일 발표. PHP/FI를 기반으로, 앤디·가트만즈와 제이브·스라스키에 의해 PHP3(PHP:Hypertext Preprocessor)로 업데이트되었다.
PHP 4.0.0
[편집]2000년 5월 22일 발표. PHP3를 큰 폭으로 기능을 확장하고 Zend 엔진을 도입하였다.
PHP 4.1.0
[편집]2001년 12월 10일 발표. 슈퍼 전역 변수가 추가된다.
PHP 4.2.0
[편집]2002년 4월 22일 발표. 보안 취약하다는 근거로 register_globals의 초기값이 Off로 변경된다.
PHP 4.3.0
[편집]2002년 12월 27일 발표. 명령 줄 인터페이스가 추가된다.
PHP 4.4.0
[편집]2005년 7월 11일 발표. 같은 날 PHP4의 지원을 2007년 12월 31일에 종료한다고 고지했다. 중대한 보안문제에 관한 수정만, 2008년 8월 8일까지 계속되어 그 후 모든 지원을 종료했다.
PHP 5.0.0
[편집]2005년 7월 13일 발표. 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL가 지원되었다. 또, SQLite 가 표준으로 장착되게 되었다. Zend 엔진 2.0을 도입했다.
PHP 5.1.0
[편집]2005년 11월 24일 발표. 실행 속도가 개선되고 PDO 확장 기능이 추가된다.
PHP 5.2.0
[편집]2006년 11월 2일 발표.
- 확장 모듈에 필터(Filter)가 기본으로 추가.
- JSON 을 쉽게 인코딩, 디코딩할 수 있는 함수 추가.
PHP 5.3.0
[편집]2009년 6월 30일 발표. 아래의 기능이 추가되었다.
- 이름공간 (Namespace)
- 지연 정적 바인딩(Late static bindings)
- goto
- 클로저(Native closures)
- ?: 연산자
- 가비지 컬렉션(garbage collection)
PHP 5.4.0
[편집]2012년 3월 1일 발표. 단일 상속의 한계를 없앤 트레이트와 짧은 배열 구문이 추가되었다.
- 개발용 웹서버가 내장되었다.
- register Global 이 삭제되었다.
- 램 사용량이 줄어들었다.
- safe mode 가 삭제되었다.
- <?= 표기가 설정에 관계없이 항상 쓸 수 있게 되었다.
- 함수 사용후 배열에서 인덱스를 바로 붙여쓸 수있게 되었다. 예) foo()[1]
PHP 5.5.0
[편집]2013년 6월 20일 발표. 아래의 기능들이 추가 또는 변경되었다.
- 제너레이터(Generators)
- finally 키워드
- 강화된 패스워드 해슁 함수
- 배열과 문자열의 디레퍼런싱
- 상수 클래스명 ::class
- empty() 함수가 수식을 지원
- foreach 내 이터레이터(Interator)로 논스칼라(non-scalar) 사용
- foreach 구문에 list() 사용
- op코드 캐시를 위한 Zend OPcache 내장
PHP 5.6.0
[편집]2014년 8월 28일 발표. 아래의 기능들이 추가되었다.
- 선언에 상수 표현식 지원
- 가변길이 인수에 대한 문법 (...$args)
- 매개변수 해체(argument unpacking)
- 거듭제곱 연산자 (**)
- 추가적인 use 문 (use function, use const)
- SAPI 모듈을 위한 새로운 phpdbg 디버거
PHP 7.0.0
[편집]2015년 12월 1일 공개되었다. 특징은 다음과 같다.
- 파서 재작성으로 성능 향상 - PHP 5.6 보다 두배 이상 빠른 속도
- 변수최적화로 메모리 사용률이 상당히 감소 PHP 5.6 대비(1/5)로 감소
- 추상 구문 트리(Abstract Syntax Tree)
- 일관된 64비트 지원(Consistent 64-bit support)
- 향상된 예외 상속(Improved Exception hierarchy)
- 많은 치명적 에러들이 예외로 전환 됨
- 보안 난수 발생기(Secure random number generator)
- 오래 됐거나 지원하지 않는 SAPI와 확장 지원 중단
- Null 병법 연산자(The null coalescing operator (??))
- 함수에 리턴 타입정의, 매개변수에 스칼라 타입 정의가능
- 익명 클래스(Anonymous Classes)
- Zero cost asserts
PHP 7.1
[편집]2016년 12월 3일 공개되었다. 추가된 특징은 다음과 같다.
- 함수리턴과 매개변수에 Nullable 지정(Nullable Type)
- 리턴 타입에 이터러블과 Void 지원(Iterable and Void Returns)
- try catch 구문에서 catch 에 한번에 여러익셉션 감지
- list 함수에서 key 사용가능
- 배열의 인덱스에 음수사용가능
- 이터러블타입인지 확인하는 is_iterable() 함수
PHP 7.2
[편집]2017년 11월 30일 공개되었다. 보안패치 종료기간은 2020년 11월 30일까지이다. 주요 특징은 다음과 같다.
- PHP 7.1 대비 10%의 성능향상
- 함수의 리턴과 매개변수의 타입으로 object 지정가능.
- 추상클래스의 추상매서드를 오버라이딩 가능
- Argon2 해시함수 지원
- 클래스 오토로딩함수 __autoload -> spl_autoload_register 로 전환
- each 함수 삭제예고됨 (이터러블로 대체권장)
PHP 7.3
[편집]2018년 12월 8일 공개되었다. 보안패치지원 종료기간은 2021년 12월 6일이다.
- PHP 7.2 대비 성능이 5% 향상되었다.
- FastCGI의 로그 작성이 최적화되었다.
- 기존 여러줄 작성가능한 문법 Heredoc, Nowdoc의 유연화
- 배열의 마지막요소에 , 가능(Trailing commas)
- 어떤 변수가 셀수있는 타입인지 체크강화
- 어떤 변수가 셀수있는 타입인지 체크하는 is_countable() 함수 추가
- samesite 쿠키 지원
- list 함수의 기본동작이 참조전달(call by references) ->값 복사(call by value) 로 전환
기존처럼 참조변수 전달시 & 명시
- 정규식엔진을 PCRE -> PCRE2로 전환
PHP 7.4
[편집]2019년 11월 28일 공개되었다. 보안패치지원 종료날짜는 2022년 11월 28일이다.
프리로딩기능이 추가되어서 로딩성능이 10%향상되었다. 기본값은 off이므로 php.ini에서 수동으로 켜야한다.
- 람다식이라고도 부르는 화살표함수 추가(Arrow functions)
- 함수 축약표현식 fn 문법 추가
- 클래스를 미리 메모리에 로딩하는 프리로딩 추가 (Preloading)
- 클래스 프로터티에 타입명시 가능
- PHP 코어의 타입시스템 개선 (Improved type variance)
- Null 병합연산자 추가 (?? 물음표가 두개이다.) (Null coalescing)
- 배열 전개연산자 추가 (Array spread operator)
- 외부 함수 인터페이스 FFI 추가로 다른언어(c나 러스트, go등)으로 작성된 라이브러리 로딩가능
- 사용자 정의 객체의 직렬화 가능
- 삼항연산자 중첩시 왼쪽부터 평가되게 전환예고(언어의 비일관성 개선)
PHP 8.0
[편집]2020년 11월 26일 출시 되었다. 보안패치 지원 종료일은 2023년 11월 26일이다.
PHP 에도 JIT 컴파일러가 도입되어 성능이 최대 2배까지 향상되었다.
- 이름있는 파라미터가 추가되었다.(Named arguments)
- 애트리뷰트가 추가되었다. 다른언어에서는 어노테이션이라고도 한다.
- 열거형을 쓸 수있게되었다.
- Match 표현식이 추가되어 함수형프로그래밍에 한걸음 더 다가서게되었다.
- Null 안전한 연산자가 추가되었다. 다른언어에서는 옵셔널이라고도 한다.
- 문자열 함수에 str_contains(), str_starts_with(), str_ends_with() 등 편리한 함수가 추가되었다.
- Throw 문법은 표현식으로 바뀌었다.
- 그 밖에 타입오류 문구와 예외처리가 일관성 있게 개선되었다.
예제
[편집]다음은 예전에 코미디 프로그램에서 유행했던, 빛나리의 타잔 노래 가사를 출력해주는 코드이다. 이와 같이 PHP 구문은 일반적인 HTML 문서에 삽입되어 동작하게 되어 있으며, 여기서는 <?php ~ ?> 사이의 내용이 PHP 코드로 해석된다.[28]