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

PHP

해시넷
이동: 둘러보기, 검색
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 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.