programing

PHP 코드를 "컴파일"하여 바이트 코드 인터프리터에 의해 실행되는 바이너리 같은 파일을 업로드할 수 있습니까?

yoursource 2022. 10. 23. 19:55
반응형

PHP 코드를 "컴파일"하여 바이트 코드 인터프리터에 의해 실행되는 바이너리 같은 파일을 업로드할 수 있습니까?

PHP가 서버에서 실행되기 전에 바이트 코드로 컴파일되고, 그 바이트 코드가 캐시되어 스크립트 전체가 모든 웹 액세스에서 다시 해석될 필요가 없다는 것을 알고 있습니다.

하지만 PHP 코드를 컴파일하여 바이트 코드 인터프리터에 의해 실행되는 바이너리 같은 파일을 업로드할 수 있습니까?

이 질문을 받은 후 페이스북은 지금까지 가장 잘 테스트된 PHP 컴파일러인 HipHop for PHP를 출시했다(세계 10대 웹사이트 중 하나를 운영하고 있다).그러나 Facebook은 컴파일러가 아닌 가상 머신인 HHVM을 선호하여 이를 중단하였다.

그 이상, 구글링PHP compiler여러 서드파티 솔루션을 제공합니다.

피치파이

  • 피치파이 깃허브
  • 는 PHP를 에 컴파일합니다.NET 및.NET 코어
  • 자기포함 바이너리 파일로 컴파일할 수 있다
  • 는 Mac, Linux, Windows, Windows Core, ARM 등에서 실행됩니다.

팔랑어

  • GitHub(다운로드), 위키백과
  • 에 컴파일 합니다.NET(CIL)은 2017년 7월부터 단종된 것으로 보이며 PHP 7을 지원하지 않는 것으로 보입니다.

물리

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

Roadsend PHP 컴파일러

  • GitHub, GitHub 리라이트
  • 컴파일러를 사용한 PHP의 무료 오픈 소스 구현
  • 네이티브 바이너리로 컴파일(Windows, Linux)
  • 2010년 이후 기고가 발견될 때까지 중단 - 웹사이트가 다운되어 GitHub에 머무르며, 2012년 초부터 마지막 변경이 있었다.

컴파일러

  • PHP의 PECL 확장
  • 실험적인
  • PHP 바이트 코드로 컴파일되지만 PHP 인터프리터를 로드하는 Windows 바이너리로 래핑할 수 있습니다(매뉴얼 참조).
  • (2014년 2월)– 2011년 마지막 변경

프로젝트 제로

  • 위키백과, IBM
  • WebSphere sMash에 대한 변경 사항 인큐베이터
  • IBM에 의해 지원
  • 자바 바이트 코드로 컴파일하다
  • 현재 (2014년 2월)– 웹사이트가 다운되어 2008년과 2009년에 크게 선전된 것처럼 보입니다.

밤발람

  • 독립 실행형 윈도우즈 이진 파일로 컴파일
  • 바이너리에는 바이트 코드와 런처가 포함되어 있습니다.
  • (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년부터 페이스북은 더 이상 그것을 사용하지 않고 컴파일러가 아닌 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 개발자들은 바이트코드가 무엇인지 전혀 알지 못한다.

그렇다면 대답은 '그렇다'입니다.방금 PHP 스크립트를 바이너리로 컴파일했습니다.그리고 그냥 이진수가 아니야CDE 어플리케이션(Wayback Machine 링크, 원래 링크가 끊어짐)을 사용하여 모든 의존관계로 분산하여 문제없이 실행할 수 있는 휴대용 바이너리로 변환했습니다.그것은 훌륭하게 동작합니다.

phc만 쓰면 돼요.

PHP 코드에는 몇 가지 컴파일러가 있습니다.이러한 기능은 런타임에 해석해야 하기 때문에 대부분 모든 PHP 기능을 지원하는 것은 아닙니다.

Palanger - http://www.php-compiler.net/ - 를 사용하고 있습니다.이러한 PHP 다이내믹 기능조차 지원하며,또한 로 컴파일할 수 있습니다.독립형 DLL로 배포할 수 있는 NET 어셈블리.

실제로 PHP 8과 함께 도입된 Just-In-Time 컴파일러는 실제로 PHP를 컴파일합니다.이상하게도 CMS 기반 웹사이트(WordPress 등)의 속도를 높이지 못하지만 PHP가 C++와 경쟁할 수 있는 문호를 열어준다.상세한 것에 대하여는, 다음의 URL 에 있는 JIT 의 실장에 관한 RFC 를 참조해 주세요.https://wiki.php.net/rfc/jit또한, Matthew Wear O'Phinney는 그 능력을 조명하는 통찰력 있는 블로그를 다수 게시했습니다.https://www.zend.com/blog/exploring-new-php-jit-compiler 를 참조해 주세요.

5.5.x와 통합된 OPcache 모듈, 공유 메모리의 휘발성, 훨씬 더 뛰어난 성능 및 php의 역동성 원리는 그대로 유지됩니다.

http://www.php.net/manual/en/opcache.installation.php

php 7에는 php ini 옵션 opcache가 있습니다.특정 폴더에 바이트 코드를 저장하는 file_cache.In은 최적화된 재사용을 위해 특정 폴더에 "컴파일"되어 저장된 php CLI 스크립트에 유용할 수 있습니다.

opcache는 컴파일되지 않지만 비슷한 것입니다.

실제 네이티브 바이너리를 실행할 수 있는 경우 컴파일러는 다음과 같습니다.

https://github.com/ircmaxell/php-compiler

PHP로 작성된 PHP 컴파일러입니다!

PHP 코드를 자체 VM 코드로 컴파일합니다.이 VM 코드는 자체 인터프리터에 의해 해석되거나(PHP로 작성된 것도 이상하지 않은가) 비트코드로 변환될 수 있습니다.LLVM 컴파일러 프레임워크 사용(clang또한 이 비트코드는 LLVM이 지원하는 모든 플랫폼(현재 중요한 거의 모든 플랫폼)의 네이티브 바이너리로 컴파일할 수 있습니다.이를 정적으로 수행하거나 코드가 실행되기 직전에 매번 수행하도록 선택할 수 있습니다(JIT 스타일).따라서 이 컴파일러가 시스템에서 작동하기 위해서는 설치된 PHP 인터프리터와 설치된 PHP 인터프리터만 필요합니다.clang컴파일러.

네이티브 바이너리를 실행할 수 없는 경우 위의 컴파일러를 인터프리터로 사용하여 자체 VM 코드를 해석할 수 있습니다.단, PHP 엔진 상에서 동작하고 있는 PHP 인터프리터를 실행하고 있기 때문에 속도가 느려지기 때문에 "이중 해석"이 가능합니다.

PHP는 실제로 많은 프로그램에서 컴파일되지 않습니다.Zend의 인코더를 사용하여 읽을 수 없게 만들 수 있습니다.

bcgen(bcompiler의 PHP7 포트)도 있습니다.

https://github.com/vjardin/bcgen/

(PHP7.2 한정)

언급URL : https://stackoverflow.com/questions/1408417/can-you-compile-php-code-and-upload-a-binary-ish-file-which-will-just-be-run

반응형