"PHP"의 두 판 사이의 차이
(→같이 보기) (태그: 모바일 편집, 모바일 웹 편집) |
|||
(사용자 4명의 중간 판 18개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''PHP'''(피에이치피)는 [[HTML]] 문서 안에 포함하여 작동하는 서버 측 [[스크립트 언어|스크립트]] 프로그래밍 언어이다. 1994년 [[라스무스 러도프]](Rasmus Lerdorf)가 개발했다. 원래 Personal Home Page의 약자였으나, 나중에 "PHP: Hypertext Preprocessor"의 | + | [[파일:PHP 로고.png|썸네일|200픽셀|'''PHP''']] |
− | + | [[파일:PHP 글자.png|썸네일|300픽셀|'''PHP''']] | |
+ | |||
+ | '''PHP'''<!--php, 피에이치피-->(피에이치피)는 [[HTML]] 문서 안에 포함하여 작동하는 서버 측 [[스크립트 언어|스크립트]] 프로그래밍 언어이다. 1994년 [[라스무스 러도프]](Rasmus Lerdorf)가 개발했다. 원래 Personal Home Page의 약자였으나, 나중에 "PHP: Hypertext Preprocessor"의 약자라고 설명되었다. | ||
== 개요 == | == 개요 == | ||
− | PHP란 주로 [[HTML]] 코드를 프로그래밍적으로 생성하며, 서버 쪽에서 실행되는 프로그래밍 언어이다. 또한 Personal Home Page Tools의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경되었다. | + | PHP란 주로 [[HTML]] 코드를 프로그래밍적으로 생성하며, 서버 쪽에서 실행되는 프로그래밍 언어이다. 또한 Personal Home Page Tools의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경되었다.〈ref name="생활코딩"〉 생활코딩, 〈[https://opentutorials.org/course/3018/233 PHP란 무엇인가?]〉, 《오픈튜토리얼스》, 2011-09-16〈/ref〉 원래 동적 웹 페이지를 만들기 위해 설계되었고 이를 구현하기 위해 PHP로 작성된 코드를 [[HTML]] 소스 문서 안에 넣으면 PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다. 근래에는 PHP 코드와 [[HTML]]을 별도로 파일을 분리하여 작성하는 경우가 일반적이며, PHP 또한 웹 서버가 아닌 PHP-FPM(PHP FastCGI Process Manager)을 통해 실행하는 경우가 늘어나고 있다.<ref name="위키백과"> 〈[https://ko.wikipedia.org/wiki/PHP PHP]〉《위키백과》</ref> |
==등장배경== | ==등장배경== | ||
− | 1994년 [[라스무스 러도프]](Rasmus Lerdorf)가 고안했으며, PHP의 처음 개발 당시 약자는 Personal Home Page Tools로써, 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 | + | 1994년 [[라스무스 러도프]](Rasmus Lerdorf)가 고안했으며, PHP의 처음 개발 당시 약자는 Personal Home Page Tools로써, 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 실용적인 툴로 제작되었다. |
− | |||
== 역사 == | == 역사 == | ||
13번째 줄: | 14번째 줄: | ||
PHP는 1995년 [[라스무스 러도프]](Rasmus Lerdorf)에 의해 PHP 1버전이 만들어졌으며, 그 후로 개발이 계속되어 오늘날까지 이르게 되었다. | PHP는 1995년 [[라스무스 러도프]](Rasmus Lerdorf)에 의해 PHP 1버전이 만들어졌으며, 그 후로 개발이 계속되어 오늘날까지 이르게 되었다. | ||
*PHP 1.0 : 1995년 6월 8일 출시되었고, [[라스무스 러도프]](Rasmus Lerdorf)가 개발하였다. 초기에는 펄로 작성된 스크립트였지만, 그 후 [[C 언어]]로 고쳐서 작성된 PHP (Personal Home Page Tools)가 된다. | *PHP 1.0 : 1995년 6월 8일 출시되었고, [[라스무스 러도프]](Rasmus Lerdorf)가 개발하였다. 초기에는 펄로 작성된 스크립트였지만, 그 후 [[C 언어]]로 고쳐서 작성된 PHP (Personal Home Page Tools)가 된다. | ||
− | *PHP 2.0 (PHP/FI) : 1996년 4월 16일 출시되었고, FI(Form Interpreter, SQL이 만든 DBMS 도구)가 통합되어 1997년에 PHP/FI2.0 이 된다. 정식명칭은 "Personal Home Page Construction Kit/Form Interpreter"이다. | + | *PHP 2.0 (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 3.0의 강점 중의 하나는 강력한 확장기능이라고 할 수 있다. 엔드유저에게 다양한 데이터베이스 접근을 위해 견고한 인프라 구조, 여러 가지 프로토콜과 API를 제공해주었으며, 이 기능으로 인해 수많은 개발자가 개발에 참여하여 새로운 확장 모듈을 개발 할 수 있게 되었다. | + | *PHP 3.0 :1998년 6월 6일 출시되었고, PHP/FI를 기반으로, 앤디·가트만즈와 제이브·스라스키에 의해 PHP3(PHP:Hypertext Preprocessor)로 업데이트되었다. PHP 3.0의 강점 중의 하나는 강력한 확장기능이라고 할 수 있다. 엔드유저에게 다양한 데이터베이스 접근을 위해 견고한 인프라 구조, 여러 가지 프로토콜과 API를 제공해주었으며, 이 기능으로 인해 수많은 개발자가 개발에 참여하여 새로운 확장 모듈을 개발 할 수 있게 되었다. |
− | *PHP 4.0 : 2000년 5월 22일 출시되었고, PHP3의 기능을 크게 확장하고, Zend 엔진을 도입하였으며 여러 가지 웹 서버에 대한 지원, HTTP 세션, 출력 버퍼링, | + | *PHP 4.0 : 2000년 5월 22일 출시되었고, PHP3의 기능을 크게 확장하고, Zend 엔진을 도입하였으며 여러 가지 웹 서버에 대한 지원, HTTP 세션, 출력 버퍼링, 강화된 유저 입력 제어, 몇 가지 새로운 언어 구조와 같은 핵심기능들을 제공하게 되었다. |
− | *PHP 4.1 : 2001년 12월 10일 출시되었고, 슈퍼 전역 변수가 추가된다. | + | *PHP 4.1 : 2001년 12월 10일 출시되었고, 슈퍼 전역 변수가 추가된다. |
− | *PHP 4.2 : 2002년 4월 22일 출시되었고, register_globals의 초기값이 Off로 변경된다. | + | *PHP 4.2 : 2002년 4월 22일 출시되었고, register_globals의 초기값이 Off로 변경된다. |
− | *PHP 4.3 : 2002년 12월 27일 출시되었고, 명령 줄 인터페이스가 추가된다. | + | *PHP 4.3 : 2002년 12월 27일 출시되었고, 명령 줄 인터페이스가 추가된다. |
− | *PHP 4.4 : 2005년 7월 11일 출시되었고, 같은 날 PHP4의 지원을 2007년 12월 31일에 종료한다고 고지했다. 중대한 보안 문제에 관한 수정만, 2008년 8월 8일까지 계속되어 그 후 모든 지원을 종료했다. | + | *PHP 4.4 : 2005년 7월 11일 출시되었고, 같은 날 PHP4의 지원을 2007년 12월 31일에 종료한다고 고지했다. 중대한 보안 문제에 관한 수정만, 2008년 8월 8일까지 계속되어 그 후 모든 지원을 종료했다. |
− | *PHP 5.0 : 2005년 7월 13일 출시되었고, 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL가 지원되었다. 또, SQLite 가 표준으로 장착되게 되었다. Zend 엔진 2.0을 도입했다. | + | *PHP 5.0 : 2005년 7월 13일 출시되었고, 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL가 지원되었다. 또, SQLite 가 표준으로 장착되게 되었다. Zend 엔진 2.0을 도입했다. |
− | *PHP 5.1 : 2005년 11월 24일 출시되었고, 실행 속도가 개선되고 PDO 확장 기능이 추가된다. | + | *PHP 5.1 : 2005년 11월 24일 출시되었고, 실행 속도가 개선되고 PDO 확장 기능이 추가된다. |
− | *PHP 5.2 : 2006년 11월 2일 출시되었고, 확장 모듈에 필터(Filter)가 기본으로 추가된다. | + | *PHP 5.2 : 2006년 11월 2일 출시되었고, 확장 모듈에 필터(Filter)가 기본으로 추가된다. |
− | *PHP 5.3 : 2009년 6월 30일 출시되었고, 이름공간 (Namespace), 지연 정적 바인딩(Late static bindings), goto, 클로저(Native closures), ?: 연산자, 가비지 컬렉션(garbage collection)등과 같은 기능들이 추가 및 변경되었다. | + | *PHP 5.3 : 2009년 6월 30일 출시되었고, 이름공간 (Namespace), 지연 정적 바인딩(Late static bindings), goto, 클로저(Native closures), ?: 연산자, 가비지 컬렉션(garbage collection)등과 같은 기능들이 추가 및 변경되었다. |
− | *PHP 5.4 : 2012년 3월 1일 출시되었고, 단일 상속의 한계를 | + | *PHP 5.4 : 2012년 3월 1일 출시되었고, 단일 상속의 한계를 벗어난 트레이트와 짧은 배열 구문이 추가되었다. |
− | *PHP 5.5 : 2013년 6월 20일 출시되었고, 제너레이터(Generators)와 코루틴(coroutines), finally 키워드, 강화된 패스워드 해슁 함수, 배열과 문자열의 디레퍼런싱, 상수 클래스명 ::class, empty() 함수가 수식을 지원, foreach 내 이터레이터(Interator)로 논스칼라(non-scalar) 사용, foreach 구문에 list() 사용, op코드 캐시를 위한 Zend OPcache 등과 같은 기능들이 추가 및 변경되었다. | + | *PHP 5.5 : 2013년 6월 20일 출시되었고, 제너레이터(Generators)와 코루틴(coroutines), finally 키워드, 강화된 패스워드 해슁 함수, 배열과 문자열의 디레퍼런싱, 상수 클래스명 ::class, empty() 함수가 수식을 지원, foreach 내 이터레이터(Interator)로 논스칼라(non-scalar) 사용, foreach 구문에 list() 사용, op코드 캐시를 위한 Zend OPcache 등과 같은 기능들이 추가 및 변경되었다. |
− | * PHP 5.6 : 2014년 8월 28일 | + | * PHP 5.6 : 2014년 8월 28일 출시되었다. |
− | * PHP 7.0 : 2015년 12월 3일 | + | **선언에 상수 표현식 지원, 가변길이 인수에 대한 문법 (...$args) |
+ | **매개변수 해체(argument unpacking) | ||
+ | **거듭제곱 연산자 (**) | ||
+ | **추가적인 use 문 (use function, use const) | ||
+ | **SAPI 모듈을 위한 새로운 phpdbg 디버거 등과 같은 기능이 추가 및 변경되었다. | ||
+ | |||
+ | * PHP 7.0 : 2015년 12월 3일 출시되었다. 엔진과 파서 재작성으로 큰 성능 향상이 있었다. | ||
+ | **PHP 5.6 보다 두배 이상 빠른 속도, 메모리 사용률이 1/5감소,<ref name= "phpce 강연"> php컨퍼런스 2018 라스무스강연 https://www.youtube.com/watch?v=SvEGwtgLtjA </ref> | ||
+ | **추상 구문 트리(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등과 같은 기능들이 추가 및 변경되었다.<ref name = "위키백과"></ref><ref name = "PHP공식홈페이지"> PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php </ref> | ||
+ | |||
+ | * 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일 공개되었다. | ||
+ | **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일 공개되었다. | ||
+ | **프리로딩기능이 추가되어서 로딩성능이 10%향상되었다. 기본값은 off이므로 php.ini에서 수동으로 켜야한다. | ||
+ | ** 람다식이라고도 부르는 화살표함수 추가(Arrow functions) | ||
+ | ** 함수 축약표현식 fn 문법 추가 | ||
+ | ** 클래스를 미리 메모리에 로딩하는 프리로딩 추가 (Preloading) | ||
+ | ** 클래스 프로터티에 타입명시 가능 | ||
+ | ** PHP 코어의 타입시스템 개선 (Improved type variance) | ||
+ | ** Null 병합연산자 추가 (?? 물음표가 두개이다.) (Null coalescing) | ||
+ | ** 배열 전개연산자 추가 (Array spread operator) | ||
+ | ** 외부 함수 인터페이스 FFI 추가로 다른언어(c나 러스트, go등)으로 작성된 라이브러리 로딩가능 | ||
+ | ** 사용자 정의 객체의 직렬화 가능 | ||
+ | ** 삼항연산자 중첩시 왼쪽부터 평가되게 전환예고(언어의 비일관성 개선) | ||
== 특징 == | == 특징 == | ||
===스크립트 언어=== | ===스크립트 언어=== | ||
− | 웹에 최적화된 언어로, 웹 개발에 필요한 수많은 로직이 함수의 형태로 미리 제공된다. 또한 웹 서버에서 처리가 이루어지는 대표적인 스크립트 언어이다. | + | 웹에 최적화된 언어로, 웹 개발에 필요한 수많은 로직이 함수의 형태로 미리 제공된다. 또한 웹 서버에서 처리가 이루어지는 대표적인 스크립트 언어이다. |
− | === | + | |
− | + | ===간편한 배포=== | |
+ | PHP의 특징은 배포가 편리하다는것이다. 개발자는 빌드할필요없이 php파일을 서버에 업로드만하면된다. | ||
+ | PHP 엔진이 웹에서 사용자의 요청이 들어오면 인터프리터가 읽고 캐싱한뒤 실행코드를 만들어둔다. | ||
+ | |||
===쉬운 코드 작성=== | ===쉬운 코드 작성=== | ||
− | C언어와 | + | C언어와 Perl보다 쉬운 문법을 가지고있다. 나중에는 객체지향 요소가 추가되었다. 그리고 스크립트 언어이기 때문에 [[HTML]]문서 내부에 입력하여 실행 할 수 있는 편리한 언어이다. |
+ | |||
===빠른 처리 속도=== | ===빠른 처리 속도=== | ||
− | PHP는 인터프리터 | + | PHP는 인터프리터 방식언어 중에서 [[파이썬]]이나 [[PERL]] 언어보다 빠르다. |
− | * 거의 모든 [[OS]]에서 실행이 가능하고, 여러가지의 DBMS 연결을 지원한다. | + | |
− | * 속도가 | + | * 거의 모든 [[OS]]에서 실행이 가능하고, PDO를 이용할 경우 여러가지의 DBMS 연결을 지원한다. |
+ | * 속도가 빠르며, 특히 윈도우 서버보다는 [[리눅스]]서버환경에 각종모듈들이 최적화되어있다. | ||
* 클래스 생성 및 상속이 가능하므로 코드를 모듈화시키기가 용이하다. | * 클래스 생성 및 상속이 가능하므로 코드를 모듈화시키기가 용이하다. | ||
− | * [[ASP]]나 [[JSP]]처럼 컴포넌트나 | + | * [[ASP]]나 [[JSP]]처럼 컴포넌트나 패키지등을 따로 설치하지 않고, 파일 업로드 및 파일 전송 등의 기능이 내장되어 배포되고있다. |
− | * 문법이 [[C]] | + | * 문법이 [[C 언어]]와 [[JAVA]] 언어의 문법과 비슷하기 때문에 [[ASP]]나 [[JSP]]에 비해 코드의 양을 많이 줄일 수 있다. |
* 데이터베이스 연결에 함수를 사용하므로 직관적이고 간결하다. | * 데이터베이스 연결에 함수를 사용하므로 직관적이고 간결하다. | ||
* 이미지를 동적으로 생성할 수 있다. | * 이미지를 동적으로 생성할 수 있다. | ||
− | * [[XML]],[[ZIP]] | + | * [[XML]], [[ZIP]] 암호화 등에 관련된 다양한 함수를 지원한다. |
== 한계점 == | == 한계점 == | ||
− | + | ||
+ | PHP 표준 실행환경은 웹서버에 의존해서 실행되는데 요청을 수행후 프로세스를 종료한다 그래서 프레임워크같이 덩치가 큰 프로그램도 요청 수행후 다시시작되는데 이는 프로그램의 반응속도를 늦추게 한다.<ref name = "wiki"> 위키백과, 〈[https://ko.wikipedia.org/wiki/PHP ]〉, 《위키백과》, 2020-05-12</ref> | ||
{{각주}} | {{각주}} | ||
− | == | + | == 참고자료 == |
* 생활코딩, 〈[https://opentutorials.org/course/3018/233 PHP란 무엇인가?]〉, 《오픈튜토리얼스》, 2011-09-16 | * 생활코딩, 〈[https://opentutorials.org/course/3018/233 PHP란 무엇인가?]〉, 《오픈튜토리얼스》, 2011-09-16 | ||
* 서버구축이야기, 〈[https://server-talk.tistory.com/25 PHP란 무엇인가?]〉, 《티스토리》, 2018-04-02 | * 서버구축이야기, 〈[https://server-talk.tistory.com/25 PHP란 무엇인가?]〉, 《티스토리》, 2018-04-02 | ||
* TCP스쿨, 〈[http://tcpschool.com/php/php_intro_intro PHP 소개]〉, 《TCP스쿨》 | * TCP스쿨, 〈[http://tcpschool.com/php/php_intro_intro PHP 소개]〉, 《TCP스쿨》 | ||
* 위시켓, 〈[http://blog.wishket.com/php-%EA%B0%84%EB%8B%A8-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%9E%A5%EB%8B%A8%EC%A0%90%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-3/ PHP 간단 개념과 장단점에 대해서]〉, 《위시켓》, 2015-03-13 | * 위시켓, 〈[http://blog.wishket.com/php-%EA%B0%84%EB%8B%A8-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%9E%A5%EB%8B%A8%EC%A0%90%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-3/ PHP 간단 개념과 장단점에 대해서]〉, 《위시켓》, 2015-03-13 | ||
− | * | + | * 〈[https://ko.wikipedia.org/wiki/PHP PHP]〉, 《위키백과》 |
* PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php | * PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php | ||
− | * KimWhale, | + | * KimWhale, 〈[https://beansberries.tistory.com/entry/PHP-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EC%9E%A5%EB%8B%A8%EC%A0%90 (웹언어) PHP 소개 및 장단점]〉, 《티스토리》 |
== 같이 보기 == | == 같이 보기 == | ||
68번째 줄: | 134번째 줄: | ||
* [[JAVA]] | * [[JAVA]] | ||
* [[HTML]] | * [[HTML]] | ||
+ | * [[Nginx]] | ||
* [[아파치]] | * [[아파치]] | ||
* [[ASP]] | * [[ASP]] | ||
* [[JSP]] | * [[JSP]] | ||
− | {{프로그래밍| | + | {{프로그래밍 언어|검토 필요}} |
− | |||
[[분류:스크립트 언어]] | [[분류:스크립트 언어]] |
2022년 4월 9일 (토) 03:20 기준 최신판
PHP(피에이치피)는 HTML 문서 안에 포함하여 작동하는 서버 측 스크립트 프로그래밍 언어이다. 1994년 라스무스 러도프(Rasmus Lerdorf)가 개발했다. 원래 Personal Home Page의 약자였으나, 나중에 "PHP: Hypertext Preprocessor"의 약자라고 설명되었다.
개요[편집]
PHP란 주로 HTML 코드를 프로그래밍적으로 생성하며, 서버 쪽에서 실행되는 프로그래밍 언어이다. 또한 Personal Home Page Tools의 약자에서 PHP:Hypertext Preprocessor 로 의미가 변경되었다.〈ref name="생활코딩"〉 생활코딩, 〈PHP란 무엇인가?〉, 《오픈튜토리얼스》, 2011-09-16〈/ref〉 원래 동적 웹 페이지를 만들기 위해 설계되었고 이를 구현하기 위해 PHP로 작성된 코드를 HTML 소스 문서 안에 넣으면 PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다. 근래에는 PHP 코드와 HTML을 별도로 파일을 분리하여 작성하는 경우가 일반적이며, PHP 또한 웹 서버가 아닌 PHP-FPM(PHP FastCGI Process Manager)을 통해 실행하는 경우가 늘어나고 있다.[1]
등장배경[편집]
1994년 라스무스 러도프(Rasmus Lerdorf)가 고안했으며, PHP의 처음 개발 당시 약자는 Personal Home Page Tools로써, 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 실용적인 툴로 제작되었다.
역사[편집]
PHP는 1995년 라스무스 러도프(Rasmus Lerdorf)에 의해 PHP 1버전이 만들어졌으며, 그 후로 개발이 계속되어 오늘날까지 이르게 되었다.
- PHP 1.0 : 1995년 6월 8일 출시되었고, 라스무스 러도프(Rasmus Lerdorf)가 개발하였다. 초기에는 펄로 작성된 스크립트였지만, 그 후 C 언어로 고쳐서 작성된 PHP (Personal Home Page Tools)가 된다.
- PHP 2.0 (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 3.0의 강점 중의 하나는 강력한 확장기능이라고 할 수 있다. 엔드유저에게 다양한 데이터베이스 접근을 위해 견고한 인프라 구조, 여러 가지 프로토콜과 API를 제공해주었으며, 이 기능으로 인해 수많은 개발자가 개발에 참여하여 새로운 확장 모듈을 개발 할 수 있게 되었다.
- PHP 4.0 : 2000년 5월 22일 출시되었고, PHP3의 기능을 크게 확장하고, Zend 엔진을 도입하였으며 여러 가지 웹 서버에 대한 지원, HTTP 세션, 출력 버퍼링, 강화된 유저 입력 제어, 몇 가지 새로운 언어 구조와 같은 핵심기능들을 제공하게 되었다.
- PHP 4.1 : 2001년 12월 10일 출시되었고, 슈퍼 전역 변수가 추가된다.
- PHP 4.2 : 2002년 4월 22일 출시되었고, register_globals의 초기값이 Off로 변경된다.
- PHP 4.3 : 2002년 12월 27일 출시되었고, 명령 줄 인터페이스가 추가된다.
- PHP 4.4 : 2005년 7월 11일 출시되었고, 같은 날 PHP4의 지원을 2007년 12월 31일에 종료한다고 고지했다. 중대한 보안 문제에 관한 수정만, 2008년 8월 8일까지 계속되어 그 후 모든 지원을 종료했다.
- PHP 5.0 : 2005년 7월 13일 출시되었고, 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL가 지원되었다. 또, SQLite 가 표준으로 장착되게 되었다. Zend 엔진 2.0을 도입했다.
- PHP 5.1 : 2005년 11월 24일 출시되었고, 실행 속도가 개선되고 PDO 확장 기능이 추가된다.
- PHP 5.2 : 2006년 11월 2일 출시되었고, 확장 모듈에 필터(Filter)가 기본으로 추가된다.
- PHP 5.3 : 2009년 6월 30일 출시되었고, 이름공간 (Namespace), 지연 정적 바인딩(Late static bindings), goto, 클로저(Native closures), ?: 연산자, 가비지 컬렉션(garbage collection)등과 같은 기능들이 추가 및 변경되었다.
- PHP 5.4 : 2012년 3월 1일 출시되었고, 단일 상속의 한계를 벗어난 트레이트와 짧은 배열 구문이 추가되었다.
- PHP 5.5 : 2013년 6월 20일 출시되었고, 제너레이터(Generators)와 코루틴(coroutines), finally 키워드, 강화된 패스워드 해슁 함수, 배열과 문자열의 디레퍼런싱, 상수 클래스명 ::class, empty() 함수가 수식을 지원, foreach 내 이터레이터(Interator)로 논스칼라(non-scalar) 사용, foreach 구문에 list() 사용, op코드 캐시를 위한 Zend OPcache 등과 같은 기능들이 추가 및 변경되었다.
- PHP 5.6 : 2014년 8월 28일 출시되었다.
- 선언에 상수 표현식 지원, 가변길이 인수에 대한 문법 (...$args)
- 매개변수 해체(argument unpacking)
- 거듭제곱 연산자 (**)
- 추가적인 use 문 (use function, use const)
- SAPI 모듈을 위한 새로운 phpdbg 디버거 등과 같은 기능이 추가 및 변경되었다.
- PHP 7.0 : 2015년 12월 3일 출시되었다. 엔진과 파서 재작성으로 큰 성능 향상이 있었다.
- PHP 5.6 보다 두배 이상 빠른 속도, 메모리 사용률이 1/5감소,[2]
- 추상 구문 트리(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등과 같은 기능들이 추가 및 변경되었다.[1][3]
- 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일 공개되었다.
- 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일 공개되었다.
- 프리로딩기능이 추가되어서 로딩성능이 10%향상되었다. 기본값은 off이므로 php.ini에서 수동으로 켜야한다.
- 람다식이라고도 부르는 화살표함수 추가(Arrow functions)
- 함수 축약표현식 fn 문법 추가
- 클래스를 미리 메모리에 로딩하는 프리로딩 추가 (Preloading)
- 클래스 프로터티에 타입명시 가능
- PHP 코어의 타입시스템 개선 (Improved type variance)
- Null 병합연산자 추가 (?? 물음표가 두개이다.) (Null coalescing)
- 배열 전개연산자 추가 (Array spread operator)
- 외부 함수 인터페이스 FFI 추가로 다른언어(c나 러스트, go등)으로 작성된 라이브러리 로딩가능
- 사용자 정의 객체의 직렬화 가능
- 삼항연산자 중첩시 왼쪽부터 평가되게 전환예고(언어의 비일관성 개선)
특징[편집]
스크립트 언어[편집]
웹에 최적화된 언어로, 웹 개발에 필요한 수많은 로직이 함수의 형태로 미리 제공된다. 또한 웹 서버에서 처리가 이루어지는 대표적인 스크립트 언어이다.
간편한 배포[편집]
PHP의 특징은 배포가 편리하다는것이다. 개발자는 빌드할필요없이 php파일을 서버에 업로드만하면된다. PHP 엔진이 웹에서 사용자의 요청이 들어오면 인터프리터가 읽고 캐싱한뒤 실행코드를 만들어둔다.
쉬운 코드 작성[편집]
C언어와 Perl보다 쉬운 문법을 가지고있다. 나중에는 객체지향 요소가 추가되었다. 그리고 스크립트 언어이기 때문에 HTML문서 내부에 입력하여 실행 할 수 있는 편리한 언어이다.
빠른 처리 속도[편집]
PHP는 인터프리터 방식언어 중에서 파이썬이나 PERL 언어보다 빠르다.
- 거의 모든 OS에서 실행이 가능하고, PDO를 이용할 경우 여러가지의 DBMS 연결을 지원한다.
- 속도가 빠르며, 특히 윈도우 서버보다는 리눅스서버환경에 각종모듈들이 최적화되어있다.
- 클래스 생성 및 상속이 가능하므로 코드를 모듈화시키기가 용이하다.
- ASP나 JSP처럼 컴포넌트나 패키지등을 따로 설치하지 않고, 파일 업로드 및 파일 전송 등의 기능이 내장되어 배포되고있다.
- 문법이 C 언어와 JAVA 언어의 문법과 비슷하기 때문에 ASP나 JSP에 비해 코드의 양을 많이 줄일 수 있다.
- 데이터베이스 연결에 함수를 사용하므로 직관적이고 간결하다.
- 이미지를 동적으로 생성할 수 있다.
- XML, ZIP 암호화 등에 관련된 다양한 함수를 지원한다.
한계점[편집]
PHP 표준 실행환경은 웹서버에 의존해서 실행되는데 요청을 수행후 프로세스를 종료한다 그래서 프레임워크같이 덩치가 큰 프로그램도 요청 수행후 다시시작되는데 이는 프로그램의 반응속도를 늦추게 한다.[4]
각주[편집]
- ↑ 1.0 1.1 〈PHP〉《위키백과》
- ↑ php컨퍼런스 2018 라스무스강연 https://www.youtube.com/watch?v=SvEGwtgLtjA
- ↑ PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php
- ↑ 위키백과, 〈[1]〉, 《위키백과》, 2020-05-12
참고자료[편집]
- 생활코딩, 〈PHP란 무엇인가?〉, 《오픈튜토리얼스》, 2011-09-16
- 서버구축이야기, 〈PHP란 무엇인가?〉, 《티스토리》, 2018-04-02
- TCP스쿨, 〈PHP 소개〉, 《TCP스쿨》
- 위시켓, 〈PHP 간단 개념과 장단점에 대해서〉, 《위시켓》, 2015-03-13
- 〈PHP〉, 《위키백과》
- PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php
- KimWhale, 〈(웹언어) PHP 소개 및 장단점〉, 《티스토리》
같이 보기[편집]