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

"PHP"의 두 판 사이의 차이

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