[php] PHP 코드를“컴파일”하고 바이너리 코드 파일을 업로드 할 수 있습니까?이 코드는 바이트 코드 인터프리터에 의해 실행됩니까?

PHP가 서버에서 실행되기 전에 바이트 코드로 컴파일 된 다음 해당 바이트 코드를 캐시 할 수 있으므로 전체 스크립트를 모든 웹 액세스로 다시 해석 할 필요가 없습니다.

그러나 PHP 코드를 “컴파일”하고 바이너리 코드 파일을 업로드 할 수 있습니까?이 코드는 바이트 코드 인터프리터에 의해 실행될 것입니까?



답변

이 질문을받은 후 Facebook은 현재까지 가장 테스트 된 PHP 컴파일러 인 HipHop for PHP 를 출시했습니다 (세계 10 대 웹 사이트 중 하나를 실행 한 것으로 보임). 그러나 페이스 북은 컴파일러가 아닌 가상 머신 인 HHVM을 선호하여 중단했습니다.

그 외에도 인터넷 검색 PHP compiler은 수많은 타사 솔루션을 제공합니다.

복숭아 파이

  • 피치 피 깃 허브
  • PHP를 .NET 및 .NET Core로 컴파일
  • 자체 포함 된 이진 파일로 컴파일 가능
  • Mac, Linux, Windows, Windows Core, ARM에서 실행됩니다 …

팔랑 게르

  • GitHub (다운로드), Wikipedia
  • .NET (CIL)으로의 컴파일은 2017 년 7 월부터 중단되어 PHP 7을 지원하지 않는 것 같습니다.

phc

  • 네이티브 바이너리로 컴파일
  • 현재 활발하지 않음 (2014 년 2 월) – 2011 년 마지막 버전, 2013 년 여름 마지막 변경

로드 센드 PHP 컴파일러

bcompiler

  • PHP의 PECL 확장
  • 실험적인
  • PHP 바이트 코드로 컴파일하지만 PHP 인터프리터를로드하는 Windows 바이너리로 래핑 할 수 있습니다 ( bcompiler_write_exe_footer()manual 참조 )
  • 단종 된 것으로 보입니다 (2014 년 2 월) – 2011 년 마지막 변경

프로젝트 제로

  • 위키 백과 , IBM
  • WebSphere sMash의 인큐베이터
  • IBM에서 지원
  • Java 바이트 코드로 컴파일
  • (판매 중단) (2014 년 2 월) – 웹 사이트가 다운되어 2008 년과 2009 년에 과대 광고처럼 보입니다.

밤 발람

  • 독립형 Windows 바이너리로 컴파일
  • 바이너리는 바이트 코드와 런처를 포함합니다.
  • 단종 된 것으로 보입니다 (2014 년 2 월) – 2006 년 마지막 변경

이진 PHP

  • C ++로 컴파일
  • 단종 된 것으로 보입니다 (2014 년 2 월) – 2003 년 마지막 변경

답변

짧은 대답은 “아니오”입니다.

현재 PHP의 구현은 해석 된 언어의 구현입니다. 모든 언어가 기술적으로 해석되거나 컴파일 될 수 있다는 사실의 이론적 인 측면을 논할 수 있지만, 현재 구현은 PHP 코드가 인터프리터를 실행하고 인터프리터가 실행 환경을 관리하는 방식입니다.

사전 컴파일 된 PHP 바이트 코드 업로드에 대한 질문에 대답하려면 가능할 수도 있지만 PHP 인터프리터가 해당 파일을 읽고 작업 할 수있는 방법을 구현해야합니다. 기존 opcode 캐시가 이미 있으면 많은 보상을 얻는 작업처럼 보이지 않습니다.


답변

질문이 처음으로 제기 된 이후로, “아니오”에서 “종류”로 답변이 변경되었습니다.

http://github.com/facebook/hiphop-php/wiki

Hip Hop for PHP는 PHP 코드를 사용하여 최적화 된 C ++로 변환 한 컴파일러였습니다. 분명히 일부 기능은 지원되지 않습니다 (예 : ‘explode’)

HipHop을 구현하는 방법에 대한 자세한 정보를 찾고이 질문을 찾았으며 내가 생각할 것이라고 생각했습니다. 🙂

그러나 2013 년 이후 Facebook에서는 더 이상 사용하지 않으며 컴파일러가 아닌 HHVM을 위해 중단되었습니다 : https://en.wikipedia.org/wiki/HipHop_for_PHP


답변

도 있습니다

어느 목표

  • 독점 PHP 응용 프로그램에서 전체 스크립트를 인코딩하려면
  • 독점 PHP 응용 프로그램에서 일부 클래스 및 / 또는 함수를 인코딩하려면
  • php.exe없이 클라이언트 데스크톱에서 사용할 수있는 php-gtk 응용 프로그램을 제작할 수 있습니다.
  • PHP에서 C 로의 변환기에 대한 타당성 조사를 수행하려면

확장은 PECL에서 사용할 수 있습니다.


답변

phc를 사용하면 PHP 프로그램을 공유 라이브러리로 컴파일하여 서버에 업로드 할 수 있습니다. PHP 프로그램은 바이너리로 컴파일됩니다. evals 및 includes 전체 PHP 표준 라이브러리 를 지원하는 방식으로 수행됩니다 .


답변

PHP 스크립트에서 바이너리 실행 파일을 생성하려는 경우 질문을 정확하게 이해하지 마십시오. 필요한 내용을 정확하게 알고있는 것처럼 보이기 때문입니다. 게다가 대부분의 PHP 개발자는 바이트 코드가 무엇인지 전혀 모른다.

그렇게 말하면 대답은 ‘ 예’ 입니다. 방금 PHP 스크립트를 바이너리로 컴파일했습니다. 그리고 이진 만이 아닙니다. CDE 응용 프로그램 을 사용했습니다 ( 원래 링크 인 Wayback Machine 링크). 지금 고장) 모든 종속성을 배포하고 문제없이 실행 할 수있는 휴대용 진로를 설정하는 … 그리고 그것을 아름답게 작동합니다.

phc 를 사용하기 만하면 됩니다.


답변

음, 누구든지 Zend Guard에 대해 들었습니다 . PHP 코드를 “기계 코드”로 인코딩 / 난독 처리합니다.