공식 홈페이지

1 개요[편집]

오리위키사용중인 언어 (7.0.5 사용중)

<?php echo "Hello, world!"; ?>
PHP의 Hello, world!

프로그래밍 언어 중 하나. 2014년 12월 3일자로 PHP 7.0이 공개된 상태이다.

대표적인 서버 측 스크립트 언어로 한국을 비롯한 전 세계 웹 시스템의 근간이 되는 언어. PHP라는 이름은 원래 Personal Home Page Tools이나, 지금은 PHP: Hypertext Preprocessor라는 재귀 약자를 사용하고 있다. C언어와 유사한 문법을 사용하며, 소규모 페이지 제작시 손쉽고 빠르다는점으로 인해 사용가능 인력이 많다. 프로그래머가 많으므로 당연히 압도적으로 사용처가 많다.

비슷한 용도의 기술로는 ASP, JSP, CGI, django, 루비 온 레일즈 등이 있지만 개발상 편의 때문에 개인적인 용도나 소규모 사이트계는 PHP가 사실상 독점한 상태. ASP는 윈도우 서버에서만 돌아가고, JSP는 톰캣 등의 복잡한 기술이 추가적으로 들어가는 등의 문제점이 있지만, PHP는 PHP 모듈만 설치하면 되고, 이 PHP 모듈은 리눅스와 윈도우 둘 다 지원하기 때문이다.

다른 서버 사이드 스크립트 언어와 마찬가지로 <?php ... ?>로 이루어진 스크립트 실행 영역이 있다. <? ... ?>로도 줄여 쓸 수 있고, 변수 하나만 출력할 경우에는 <?=$var?>[1]같은 형식으로도 줄일 수 있다. 그러나 이렇게 줄여 쓰는 방식은 기본적으로 꺼져 있으므로 쓰려면 php.ini에서 short_open_tags의 설정을 바꿔줘야 한다. 이 줄여 쓰는 방식이 꺼져 있는 이유는 XML의 <? xml version="1.0" ?>과 같은 구문과 충돌하기 때문이다. 원래 PHP가 처음 나왔을 때는 HTML만 있어서 줄여 쓰는 방식도 문제가 없었지만, HTML에 XML의 문법을 도입한 XHTML 1.0이 나오면서 충돌이 일어났고 결국 저 옵션이 기본적으로 꺼져 있는 것으로 변경된 것. 다행히 HTML5에서는 XML 문법이 도로 빠졌다.

상기했듯 PHP는 그 형태가 C언어와 매우 유사한데, 몇 가지 상수와 변수 선언이 필요 없다는 것을 제외하면 큰 차이가 없다. 따라서 C언어를 할 줄 아는 사람은 PHP도 할 수 있다고 봐도 무방하다.[2] 사실 C 경력자라면 PHP로 1~2주안에 간단한 쇼핑몰 만든다!

프리프로세서가 오픈소스이다보니 이식성이 좋아서 거의 모든 웹 서버에서 실행할 수 있다. Microsoft의 IIS에서도 실행할 수 있다! 윈도우용은 그 특성상 실행파일(바이너리)로 만들어서 제공한다. 그 동안 윈도우용은 32비트 버전밖에 안 나왔지만, 최신 버전인 5.5부터는 64비트 버전도 나오고 있다. 물론 윈도우용 소스를 다운받아 64비트용으로 컴파일해도 된다. 윈도우용의 경우 동작 방식의 차이 때문에 IIS에서 돌리는 PHP는 Non-Thread Safe 버전으로, Apache에서 돌리는 PHP는 Thread-Safe 버전으로 따로 나온다. 쓰는 웹 서버 프로그램을 잘 보고 다운받아야 한다.[3]

한때 포털사이트나 기업이 운용하는 웹사이트에서도 PHP를 사용하긴 하였는데, 보안적 취약성으로 인하여 현재는 Java 계열의 JSP나 C# 계열의 ASP.NET으로 옮겨갔다. 참고로 JSP나 ASP.NET은 로드 밸런싱 기능이 포함되어 있어서 상대적으로 웹 서버의 부하를 줄여주는 효과가 있으며, PHP에 비해 보안기능이 훨씬 강력하다. 상기한 보안문제[4] 및 대량의 트래픽이 발생할 경우의 문제 등으로 인해 기업 사이트 혹은 상업적 목적의 대형 사이트는 PHP를 쓰는경우가 거의 없다. IT관련 기업 외부노출 페이지를 PHP로 짠다면 제대로 된 회사가 아니라는 얘기까지 있을 정도. 페이스북마저도 2014년도 부터 PHP쓰지 않고 hack 언어를 사용한다. 관련기사 [5] [6] [7] PHP의 보안문제는 크게 두가지 측면에서 기인한다. 하나는 PHP 인터프리터에 오류나 허술한[8] 점이 많은 것이고, 또 하나는 개발자 중 허술한 개발자들이 섞여있다는 것이다. 어찌보면 더 큰 문제다. 이 중 PHP 인터프리터의 허술함은 Codeigniter와 같은 프레임웍에서 제공하는 기능들을 이용해서 보완이 가능해져서 요즘은 나아진 상태다.

개인 웹호스팅..흠 쪽으로 내려오면 여전히 PHP가 강세이다.[9] JSP의 경우에는 아파치나 IIS말고도 톰캣이란 별도의 서버툴을 설치해야 되는데 설치는 둘째치고 코드가 갱신될 때마다 톰캣 서버쪽에도 반영을 해줘야한다. 이게 서버 관리자 입장에서는 은근히 귀찮다(…). ASP.NET은 일단 .NET이 기반이라 마이크로소프트의 운영체제와 IIS를 설치해야 되는데 문제는 이게 다 라이센스비 깨지는 것들이다(…).[10] [11] 본인이 꼭 필요하다면 지원하는 곳을 찾을 수는 있는데 비용이 꽤 많이 든다는 점을 염두에 두자.

PHP4까지는 클래스를 지원하기는 하는데 좀 시원찮아서(...) 아직 객체지향 프로그램을 만들기 어려웠지만 5에서는 많이 개선됐다. 그 덕분에 PHP4까지는 정말 순수하게 스크립트 형태로 작성된 코드들이 많았는데, PHP5 적용 이후로는 점점 객체지향 프로그래밍에 가까운 코드들이 나오고 있다. 덕분에 프로그래밍 언어를 정식으로 배우지 않은 사람들 입장에서는 코드 해독하기가 난해해지고 있다(…). PHP의 최대 장점이었던 진입장벽이 높아지고 있다고 우려하는 사람들도 있을 정도.[12]

사실 전체적으로 '뭔가 잘 설계된' 언어는 결코 아니다. 예를 들어 내장 함수나 인자 이름 명명에 일관성이 부족하다. 이는 필요할 때마다 그 기능을 그때그때 추가하는 방식으로 개발되었기 때문이다. 그 밖에도 여러 가지로 까인다. 역으로 많은 부분을 개발자에게 맡기는 특성 때문에, 부담없는 웹 프로그래밍에는 그만인 언어라는 평가도 있다.

현재 웹상에 공개된 많은 웹 관련 어플리케이션들이 PHP로 작성되었기 때문에 간단하게 필요한 부분을 고칠 수 있을 정도로 배워두면 상당한 도움이 된다.

종종 일부 사이트에서 php 파일을 다운로드받는 경우가 있는데 이게 php 스크립트가 아니라 스크립트의 실행 결과물로써 나오는 php라는 확장자를 가진 html 파일이라는 사실을 아는 이는 그다지 많지 않다. 아무리 허술해도 서버의 소스 코드를 그냥 내뱉을 정도로 허술하지는 않다. 어디 가서 php 다운받는다고 말하지 말자. 컴공 있으면 개쪽난다 단, 진짜 php 소스가 다운로드 되는 경우가 있는데, 이 경우는 서버 세팅하면서 PHP 모듈을 설치하지 않거나 모듈 설정이 잘못된 경우다. 이런 경우는 php 파일을 서버에서 스크립트로 인식 못하기 때문에 일반 파일로 간주하고 다운로드시키기 때문이다. 주로 관리가 안 되고 오랫동안 방치된 사이트가 이런 경우가 많다. 아니면 테스트용 서버이거나.

일단 프리프로세서는 3.x[13]를 제외한 모든 버전이 PHP License라 불리는 독자적 라이센스를 따른다. MIT 라이센스 비스무리한 형태이나 프리프로세서를 재배포할 때 (내용 수정 여부에 관계없이)패키지명에 PHP라는 단어를 넣지 못하게 하고 'This product includes PHP software, freely available from <http://www.php.net/software/>
'라는 문구를 코드에 삽입할 것을 강제하는 내용이 있어 GPL과는 호환이 되지 않는다.

2012년 3월 현재 5.4버전이 배포되었다! 다만 업데이트된 기능[14]이 다른 언어에서 이미 지원되고 있으나, 제작진들의 모르쇠로 인해서 환호성과 탄식이 교차하고 있다.
신기능 소개

2013년 6월에 5.5가 배포되었다. yield, finally 키워드 지원 결국 또 뒷북, 보안성 강화, 배열 지원 강화 등을 골자로 하고 있다. 대신 MySQL의 지원은 축소되어, mysqli 프로토콜을 제외한 연결을 삭제하였다. 망했어요

2014년 8월에 5.6이 배포되었다. $HTTP_RAW_POST_DATA가 deprecate 되었고, 2기가 이상 파일 업로드가 가능해졌다. 또한 지수 표현을 위해 별도의 함수를 사용했었으나 **라는 연산자가 추가되었다. 결국 이제야?
상세 업데이트 내용(영어)

7.0이 2015/12/03일에 나왔다. [1]

2 컴파일러?[편집]

PHP는 스크립트 언어인터프리터가 소스 코드를 매번 일일이 해석해서 실행하는 방식이라 아무래도 퍼포먼스에 한계가 있다. 그래서 PHP 소스코드를 최대한 그대로 재활용하되 컴파일링을 통해 퍼포먼스를 향상시키는 소프트웨어들이 몇 개 개발돼 왔다.

페이스북은 자사 서비스를 개발하다가 PHP의 퍼포먼스 문제를 해소하기 위해 오픈소스HipHop for PHPHipHop Virtual Machine(HHVM)을 개발했다. 전자는 PHP 코드를 C++ 코드로 변환한 뒤 컴파일하는 방식이고, 후자는 Java와 비슷하게 JIT 컴파일링을 하는 방식이다. 페이스북은 현재 전자의 개발을 중단하고 후자만 개발하여 내놓고 있다. 참고로 페이스북은 HHVM을 개발하면서 Hack 언어라는 프로그래밍 언어도 만들었는데, HHVM에서 Hack 언어로 작성된 코드도 실행할 수 있다.

다른 툴에 대한 설명은 추가바람.

  1. 제로보드 스킨을 만져봤다면 많이 봤을 것이다.
  2. 물론 언어와는 별개로 웹과 HTTP가 동작하는 방식을 알아야 제대로 개발이 가능하다. 이건 JSP나 ASP등을 하더라도 마찬가지.
  3. 다운로드 받는 페이지 옆에 보면 영어긴 해도 잘 설명되어 있다.
  4. Stefan Esser 라는 보안 전문가가 만든 패치인 수호신 (진짜 이름이 Suhosin 이다.) 으로 인해 어느 정도 개선되었다.그의 여자친구가 한국인이다
  5. hack 언어는 힙합 VM에 최적화 되어있는 언어다. 자체 컴파일러 '힙합'으로 컴파일한다.
  6. '페이스북도 쓴다'라는 것은 많은 PHP 옹호자들이 말하는 것 중 가장 설득력이 없는 것이기도 하다. 왜냐하면 PHP의 단점을 보완하기 위해 Hack이란 언어를 개발했기 때문이다. 페이스북이 PHP 구현체의 문제를 해결하기 위해서 HHVM이라는 새 구현체를 만드는 엄청난 고생을 했다는 것을 잊어선 안된다.
  7. 페이스북이 개발한 PHP 구현체인 HHVM은 PHP와 Hack 두 언어에 호환하므로 페이스북이 PHP를 버렸다는 말은 엄밀히 따져 틀린 말이다.
  8. 웹에서 오가는 html속에 표현가능한 여러 정보들을 쉽게 처리하려다보니까 태생적으로 들어오고 나가는 정보를 느슨하게 취급한다. 이 성질을 응용한 것이 XSS공격.
  9. 대부분의 웹호스팅이 PHP를 기본적으로 지원하고 있다. 그리고 상대적으로 가격이 저렴한 편이다. 왜냐하면 한 서버에 수용할 수 있는 사용자가 더 많기 때문이다.
  10. Windows Server 2008 R2가 가장 싼 것이 60만원부터 시작한다.
  11. 값싸게 .NET을 돌리려면 모노로 돌리면 되지만 MS API가 완전히 구현되어있지는 않으므로 실행이 안 되는 경우도 있을 수 있다.
  12. 그런데 CakePHP 같이 MVC패턴을 지원하는 라이브러리가 개발되었기 때문에 어떻게 보면 오히려 난이도가 더 낮아졌다고 할 수 있다..
  13. PHP License/GPL 듀얼 라이센스를 채택했다.
  14. 배열을 []로만 선언하기, 배열을 리턴하는 함수를 곧바로 접근하기 등. 이것은 이미 오래 전부터 자바스크립트에서 구현된 것들이다. 이외에도 자바스크립트에서 유래한 일부 기능이 추가되었다.
랜덤