검수요청.png검수요청.png

"PHP"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(태그: 모바일 편집, 모바일 웹 편집)
 
(사용자 5명의 중간 판 73개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''PHP'''(피에이치피)는 [[HTML]] 문서 안에 포함하여 작동하는 서버 측 [[스크립트 언어|스크립트]] 프로그래밍 언어이다. 1994년 [[라스무스 러도프]](Rasmus Lerdorf)가 개발했다. 원래 Personal Home Page의 약자였으나, 나중에 "PHP: Hypertext Preprocessor"의 약자(backronym)라고 설명되었다. [[리눅스]] 운영체제에 [[아파치]] 웹서버를 설치하고 [[마이에스큐엘]](MySQL) DB 환경에서 PHP 프로그래밍 언어가 주로 사용되기 때문에 [[LAMP]]라는 말이 생겼다.
+
[[파일:PHP 로고.png|썸네일|200픽셀|'''PHP''']]
[[파일:PHP.png|200픽셀|썸네일|오른쪽]]
+
[[파일: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 로 의미가 변경되었다.<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]>, 《위키백과》, 2019-06-29</ref>
+
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로써, 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 실용적인 툴로 제작되었다.
  
 
== 역사 ==
 
== 역사 ==
 
[[파일:라스무스 러도프.jpg |썸네일|400픽셀|'''라스무스 러도프''' (Rasmus Lerdorf)]]
 
[[파일:라스무스 러도프.jpg |썸네일|400픽셀|'''라스무스 러도프''' (Rasmus Lerdorf)]]
PHP는 1995년 [[라스무스 러도프]]에 의해 PHP 1버전이 만들어졌으며, 그 후로 개발이 계속되어 오늘날까지 이르게 되었다.
+
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감소,<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 1.0===
+
* PHP 7.1
1995년 6월 8일 발표. 라스무스 러도프가 개발하였다. 초기에는 펄로 작성된 스크립트였지만, 그 후 C 언어로 고쳐서 작성된 PHP (Personal Home Page Tools)가 된다.
+
** 2016년 12월 3일 공개되었다. 추가된 특징은 다음과 같다.
 +
**함수리턴과 매개변수에 Nullable 지정(Nullable Type)
 +
**리턴 타입에 이터러블과 Void 지원(Iterable and Void Returns)
 +
**try catch 구문에서 catch 에 한번에 여러익셉션 감지
 +
**list 함수에서 key 사용가능
 +
**배열의 인덱스에 음수사용가능
 +
**이터러블타입인지 확인하는 is_iterable() 함수
  
===PHP 2.0 (PHP/FI)===
 
1996년 4월 16일 발표. FI(Form Interpreter, SQL이 만든 DBMS 도구)가 통합되어 1997년에 PHP/FI2.0 이 된다. 정식명칭은 "Personal Home Page Construction Kit/Form Interpreter"이다.<ref name = "위키백과"></ref>
 
  
===PHP 3.0===
+
* PHP 7.2
1998년 6월 6일 발표. PHP/FI를 기반으로, 앤디·가트만즈와 제이브·스라스키에 의해 PHP3(PHP:Hypertext Preprocessor)로 업데이트되었다. PHP 3.0의 강점중의 하나는 강력한 확장기능이라고 할 수 있다. 엔드유저에게 다양한 데이터베이스 접근을 위해 견고한 인프라구조, 여러가지 프로토콜과 API를 제공해주었으며, 이 기능으로 인해 수 많은 개발자가 개발에 참여하여 새로운 확장 모듈을 개발 할 수 있게 되었다.
+
** 2017년 11월 30일 공개되었다.
 +
**PHP 7.1 대비 10%의 성능향상
 +
**함수의 리턴과 매개변수의 타입으로 object 지정가능.
 +
**추상클래스의 추상매서드를 오버라이딩 가능
 +
**Argon2 해시함수 지원
 +
**클래스 오토로딩함수 __autoload -> spl_autoload_register 로 전환
 +
**each 함수 삭제예고 (이터러블로 대체권장)
  
===PHP 4.0===
+
* PHP 7.3
2000년 5월 22일 발표. PHP3의 기능을 크게 확장하고. Zend 엔진을 도입하였으며 여러가지 웹 서버에 대한 지원, HTTP 세션, 출력 버퍼링, 보안이 강화된 유저 입력 제어, 몇가지 새로운 언어 구조와 같은 핵심기능들을 제공하게 되었다.
+
** 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 4.1===
+
* PHP 7.4
2001년 12월 10일 발표. 슈퍼 전역 변수가 추가된다.<ref name = "위키백과"></ref>
+
** 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 4.2===
+
== 특징 ==
2002년 4월 22일 발표. register_globals의 초기값이 Off로 변경된다.<ref name = "위키백과"></ref>
+
===스크립트 언어===
 +
웹에 최적화된 언어로, 웹 개발에 필요한 수많은 로직이 함수의 형태로 미리 제공된다. 또한 웹 서버에서 처리가 이루어지는 대표적인 스크립트 언어이다.
  
===PHP 4.3===
+
===간편한 배포===
2002년 12월 27일 발표. 명령 줄 인터페이스가 추가된다.<ref name = "위키백과"></ref>
+
PHP의 특징은 배포가 편리하다는것이다. 개발자는 빌드할필요없이 php파일을 서버에 업로드만하면된다.
 +
PHP 엔진이 웹에서 사용자의 요청이 들어오면 인터프리터가 읽고 캐싱한뒤 실행코드를 만들어둔다.
  
===PHP 4.4===
+
===쉬운 코드 작성===
2005년 7월 11일 발표. 같은 날 PHP4의 지원을 2007년 12월 31일에 종료한다고 고지했다. 중대한 보안문제에 관한 수정만, 2008년 8월 8일까지 계속되어 그 후 모든 지원을 종료했다.<ref name = "위키백과"></ref>
+
C언어와 Perl보다 쉬운 문법을 가지고있다. 나중에는 객체지향 요소가 추가되었다. 그리고 스크립트 언어이기 때문에 [[HTML]]문서 내부에 입력하여 실행 할 수 있는 편리한 언어이다.
  
===PHP 5.0===
+
===빠른 처리 속도===
2005년 7월 13일 발표. 의사적인 객체 지향이 한층 강화됨과 동시에 클래스 라이브러리로서 SPL가 지원되었다. 또, SQLite 가 표준으로 장착되게 되었다. Zend 엔진 2.0을 도입했다.<ref name = "위키백과"></ref>
+
PHP는 인터프리터 방식언어 중에서 [[파이썬]]이나 [[PERL]] 언어보다 빠르다.
  
===PHP 5.1===
+
* 거의 모든 [[OS]]에서 실행이 가능하고, PDO를 이용할 경우 여러가지의 DBMS 연결을 지원한다.
2005년 11월 24일 발표. 실행 속도가 개선되고 PDO 확장 기능이 추가된다.<ref name = "위키백과"></ref>
+
* 속도가 빠르며, 특히 윈도우 서버보다는 [[리눅스]]서버환경에 각종모듈들이 최적화되어있다.
 +
* 클래스 생성 및 상속이 가능하므로 코드를 모듈화시키기가 용이하다.
 +
* [[ASP]]나 [[JSP]]처럼 컴포넌트나 패키지등을 따로 설치하지 않고, 파일 업로드 및 파일 전송 등의 기능이 내장되어 배포되고있다.
 +
* 문법이 [[C 언어]]와 [[JAVA]] 언어의 문법과 비슷하기 때문에 [[ASP]]나 [[JSP]]에 비해 코드의 양을 많이 줄일 수 있다.
 +
* 데이터베이스 연결에 함수를 사용하므로 직관적이고 간결하다.
 +
* 이미지를 동적으로 생성할 수 있다.
 +
* [[XML]], [[ZIP]] 암호화 등에 관련된 다양한 함수를 지원한다.
  
===PHP 5.2===
+
== 한계점 ==
2006년 11월 2일 발표. 확장 모듈에 필터(Filter)가 기본으로 추가된다.<ref name = "위키백과"></ref>
 
 
 
===PHP 5.3===
 
2009년 6월 30일 발표. 아래의 기능이 추가되었다.
 
* 이름공간 (Namespace)
 
* 지연 정적 바인딩(Late static bindings)
 
* goto
 
* 클로저(Native closures)
 
* ?: 연산자
 
* 가비지 컬렉션(garbage collection)<ref name = "위키백과"></ref>
 
 
 
===PHP 5.4===
 
2012년 3월 1일 발표. 단일 상속의 한계를 없앤 트레이트와 짧은 배열 구문이 추가되었다.<ref name = "위키백과"></ref>
 
 
 
===PHP 5.5===
 
2013년 6월 20일 발표. 아래의 기능들이 추가 또는 변경되었다.
 
* 제너레이터(Generators)와 코루틴(coroutines)
 
* finally 키워드
 
* 강화된 패스워드 해슁 함수
 
* 배열과 문자열의 디레퍼런싱
 
* 상수 클래스명 ::class
 
* empty() 함수가 수식을 지원
 
* foreach 내 이터레이터(Interator)로 논스칼라(non-scalar) 사용
 
* foreach 구문에 list() 사용
 
* op코드 캐시를 위한 Zend OPcache<ref name = "위키백과"></ref>
 
 
 
===PHP 5.6===
 
2014년 8월 28일 발표. 아래의 기능들이 추가되었다.
 
* 선언에 상수 표현식 지원
 
* 가변길이 인수에 대한 문법 (...$args)
 
* 매개변수 해체(argument unpacking)
 
* 거듭제곱 연산자 (**)
 
* 추가적인 use 문 (use function, use const)
 
* SAPI 모듈을 위한 새로운 phpdbg 디버거<ref name = "위키백과"></ref>
 
 
 
===PHP 7.0===
 
2015년 12월 3일 공개되었다. 특징은 다음과 같다.
 
* 성능 향상 - PHP 5.6 보다 두배 이상 빠른 속도
 
* 메모리 사용률이 현저히 감소
 
* 추상 구문 트리(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>
 
 
 
== 특징 ==
 
웹에 최적화된 언어로, 웹 개발에 필요한 수많은 로직이 함수의 형태로 미리 제공된다. 크로스 플랫폼을 사용하고 있으며, 거의 모든 데이터베이스를 지원한다는 장점들이 있다. 또한 코드 작성이 쉽고 문법이 간단하기 때문에 가장 많은 공개소프트웨어가 PHP로 만들어지기도 했다. PHP는 인터프리터 방식을 채택하여 일반적인 ASP나 PERL 언어보다 빠른 처리속도를 가지고 있다. 파일 업로드나 메일 전송 등의 기능은 자체적으로 지원하기 때문에 별도의 설치가 필요없다. 그리고 이미지를 동적으로 생성할 수 있으며, XML, ZIP, PDF, 암호화 등에 관련된 다양한 함수를 지원하기에 쉽게 사용할 수 있다는 장점을 가지고 있다.<ref name="생활코딩"></ref>
 
  
== 한계점 ==
+
PHP 표준 실행환경은 웹서버에 의존해서 실행되는데 요청을 수행후 프로세스를 종료한다 그래서 프레임워크같이 덩치가 큰 프로그램도 요청 수행후 다시시작되는데 이는 프로그램의 반응속도를 늦추게 한다.<ref name = "wiki"> 위키백과, 〈[https://ko.wikipedia.org/wiki/PHP ]〉, 《위키백과》, 2020-05-12</ref>
PHP는 오직 "웹 개발"에 특화된 언어이고, 이 언어가 만들어진 목적 자체가 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발된 언어이기 때문에 간단한 사이트 제작에는 최적화되어 있지만, 방대한 웹사이트를 만들 경우, 체계적으로 구조를 잡기가 힘들어진다. 웹사이트를 만든 후 관리도 힘들기 때문에 복잡한 사이트를 만들기엔 관리하기가 힘들다. 또한 오픈소스이기 때문에 다른 프로그래머들이 쉽게 접근할 수 있어 보안 문제가 발생할 가능성이 있다.<ref> 위시켓, 〈[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 간단 개념과 장단점에 대해서]〉, 《위시켓》</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 간단 개념과 장단점에 대해서]〉, 《위시켓》
+
* 위시켓, 〈[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]>, 《위키백과》, 2019-06-29
+
* [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, 〈[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 소개 및 장단점]〉, 《티스토리》
  
 
== 같이 보기 ==
 
== 같이 보기 ==
111번째 줄: 131번째 줄:
 
* [[마이에스큐엘]](MySQL)
 
* [[마이에스큐엘]](MySQL)
 
* [[리눅스]]
 
* [[리눅스]]
 +
* [[C]]
 +
* [[JAVA]]
 +
* [[HTML]]
 +
* [[Nginx]]
 +
* [[아파치]]
 +
* [[ASP]]
 +
* [[JSP]]
  
{{프로그래밍|토막글}}
+
{{프로그래밍 언어|검토 필요}}
  
[[분류:프로그래밍 언어]]
 
 
[[분류:스크립트 언어]]
 
[[분류:스크립트 언어]]

2022년 4월 9일 (토) 03:20 기준 최신판

PHP
PHP

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로써, 이름에서도 알 수 있듯이, 개인이 홈페이지를 좀 더 쉽게 만들기 위해 개발한 실용적인 툴로 제작되었다.

역사[편집]

라스무스 러도프 (Rasmus Lerdorf)

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 연결을 지원한다.
  • 속도가 빠르며, 특히 윈도우 서버보다는 리눅스서버환경에 각종모듈들이 최적화되어있다.
  • 클래스 생성 및 상속이 가능하므로 코드를 모듈화시키기가 용이하다.
  • ASPJSP처럼 컴포넌트나 패키지등을 따로 설치하지 않고, 파일 업로드 및 파일 전송 등의 기능이 내장되어 배포되고있다.
  • 문법이 C 언어JAVA 언어의 문법과 비슷하기 때문에 ASPJSP에 비해 코드의 양을 많이 줄일 수 있다.
  • 데이터베이스 연결에 함수를 사용하므로 직관적이고 간결하다.
  • 이미지를 동적으로 생성할 수 있다.
  • XML, ZIP 암호화 등에 관련된 다양한 함수를 지원한다.

한계점[편집]

PHP 표준 실행환경은 웹서버에 의존해서 실행되는데 요청을 수행후 프로세스를 종료한다 그래서 프레임워크같이 덩치가 큰 프로그램도 요청 수행후 다시시작되는데 이는 프로그램의 반응속도를 늦추게 한다.[4]

각주[편집]

  1. 1.0 1.1 PHP〉《위키백과》
  2. php컨퍼런스 2018 라스무스강연 https://www.youtube.com/watch?v=SvEGwtgLtjA
  3. PHP 공식 홈페이지 - http://docs.php.net/manual/kr/history.php.php
  4. 위키백과, 〈[1]〉, 《위키백과》, 2020-05-12

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 PHP 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.