Czy można "skompilować" kod PHP?

Wiem, że PHP jest kompilowane do kodu bajtowego przed uruchomieniem na serwerze, a następnie ten kod bajtowy może być buforowany, aby cały skrypt nie musiał być ponownie interpretowany przy każdym dostępie do Internetu.

Ale czy możesz "skompilować" php i przesłać plik binarny, który będzie uruchamiany przez interpreter kodu bajtowego?

 201
Author: sepp2k, 2009-09-11

11 answers

Po zadaniu tego pytania, Facebook uruchomił HipHop dla PHP , który jest prawdopodobnie najlepiej przetestowanym kompilatorem PHP do tej pory(widząc, że prowadził jedną z 10 największych stron na świecie). Jednak Facebook zaprzestał go na rzecz HHVM, który jest maszyną wirtualną, a nie kompilatorem.

Poza tym, googling PHP compiler pojawia się wiele rozwiązań stron trzecich.

Phalanger

Phc

  • kompiluje do natywnych binariów
  • nie bardzo aktywny (luty 2014) - Ostatnia wersja w 2011, Ostatnia zmiana w lecie 2013

Roadsend PHP Compiler

Bcompiler

  • PECL rozszerzenie PHP
  • eksperymentalne
  • kompiluje do kodu bajtowego PHP, ale może zawijać go w binarny system Windows, który ładuje interpreter PHP (zobacz bcompiler_write_exe_footer() manual )
  • wygląda wycofane teraz (luty 2014) - Ostatnia zmiana w 2011

Projekt Zero

  • Wikipedia, IBM
  • inkubator zmian dla WebSphere sMash
  • obsługiwane przez IBM
  • kompiluje do kodu bajtowego Javy
  • wygląda teraz przerwane (luty 2014) - strona w dół, wygląda jak duży hype w 2008 i 2009

Bambalam

  • kompiluje do samodzielnych binariów Windows
  • pliki binarne zawierają bytecode i launcher
  • wygląda teraz (Luty 2014) - Ostatnia zmiana w 2006

BinaryPHP

  • kompiluje do C++
  • wygląda wycofane teraz (luty 2014) - Ostatnia zmiana w 2003
 216
Author: Frank Farmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 23:40:57

Krótka odpowiedź brzmi "nie".

Obecna implementacja PHP to implementacja języka interpretowanego. Można argumentować teoretyczne aspekty faktu, że każdy język może być technicznie interpretowany lub kompilowany, ale w obecnym stanie, obecne implementacje są takie, że kod PHP wymaga interpretera do uruchomienia, a interpreter zarządza środowiskiem wykonującym.

Aby odpowiedzieć na twoje pytanie o przesyłanie wstępnie skompilowanego kodu bajtowego PHP, prawdopodobnie jest to możliwe, ale trzeba zaimplementować sposób na interpreter PHP do odczytu w takim pliku i pracy z nim. Przy istniejących już buforach kodów opcode nie wydaje się to zadaniem, które przyniosłoby wiele korzyści.

 21
Author: zombat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 00:31:33

Odkąd pytanie zostało zadane po raz pierwszy, nastąpiła zmiana tej odpowiedzi z "nie" na "rodzaj"

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

Hip Hop dla PHP był kompilatorem, który wziął kod PHP i przekształcił go w wysoce zoptymalizowany C++ Najwyraźniej niektóre funkcje nie są obsługiwane (na przykład 'explode')

Znalazłem to pytanie szukając więcej informacji jak zaimplementować HipHop i pomyślałem, że się odezwę:)

Od 2013 Facebook nie korzysta już z niego, jednak i został wycofany na rzecz HHVM, który nie jest kompilatorem: https://en.wikipedia.org/wiki/HipHop_for_PHP

 16
Author: Alex C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 13:24:54

Istnieje również

Które cele

  • aby zakodować cały skrypt we własnej aplikacji PHP
  • aby zakodować niektóre klasy i / lub funkcje w zastrzeżonej aplikacji PHP
  • aby umożliwić produkcję aplikacji php-gtk, które mogą być używane na komputerach klienckich, bez potrzeby stosowania php.exe.
  • aby wykonać studium wykonalności dla konwertera PHP na C

Rozszerzenie jest dostępne w PECL.

 10
Author: Gordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-18 23:54:02

Phc pozwala na kompilowanie programów PHP do bibliotek współdzielonych, które można przesłać na serwer. Program PHP jest kompilowany do binariów. Odbywa się to w taki sposób, aby obsługiwać evals, include s i całą bibliotekę standardową PHP.

 8
Author: Paul Biggar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-26 14:36:39

Jeśli po prostu szukasz binarnego pliku wykonywalnego ze skryptu PHP, to unikaj prób precyzowania swojego pytania, ponieważ sprawi, że okaże się, że wiesz dokładnie, czego potrzebujesz. Poza tym, większość programistów PHP nie ma absolutnie żadnego pojęcia o tym, czym jest bajt.

Z tym powiedziane, odpowiedź jest tak . Właśnie skończyłem kompilować skrypt PHP do pliku binarnego. I to nie byle co. Korzystałem z aplikacji CDE (link do Wayback Maszyna, oryginalny link jest teraz uszkodzony), aby przekształcić go w przenośny binarny, który może być dystrybuowany ze wszystkimi zależnościami i wykonywany bez żadnego problemu... i działa pięknie.

Wystarczy użyć phc .

 8
Author: asiby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-09 22:04:26

Ktoś słyszał o Zend Guard, który robi dokładnie to, o co prosi ta osoba. Koduje / zaciemnia kod PHP do "kodu maszynowego".

 7
Author: John Dillick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-27 15:47:51

Istnieje kilka "kompilatorów" kodu PHP. Większość z nich nie obsługuje wszystkich funkcji PHP, ponieważ muszą one być interpretowane podczas wykonywania.

Używamy Phalanger- http://www.php-compiler.net/ - to wspiera nawet te brudne funkcje dynamiczne PHP, i nadal jest w stanie skompilować je jako.NET assembly, które mogą być dystrybuowane jako samodzielny DLL.

 2
Author: Jakub Míšek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-11 21:08:42

Patrz 5.5.x ze zintegrowanym modułem OPcache, Lotny w pamięci współdzielonej, znacznie większa wydajność i zasada dynamiki php pozostają nietknięte.

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

 1
Author: cplusplus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 20:57:52

W php 7 znajduje się opcja php ini opcache.file_cache , który zapisuje kod bajtowy w określonym folderze. W może być przydatne w skrypcie php cli, które są "skompilowane" i zapisane w określonym folderze do zoptymalizowanego ponownego użycia.

Opcache nie jest kompilacją, ale jest czymś podobnym.

 1
Author: caiofior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 07:21:12

PHP tak naprawdę nie jest kompilowany jak w przypadku wielu programów. Możesz jednak użyć kodera Zend, aby uczynić go nieczytelnym.

 0
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 00:25:25