Wiem, że PHP jest kompilowane do kodu bajtowego przed uruchomieniem na serwerze, a następnie ten bajtowy kod może być buforowany, aby cały skrypt nie musiał być ponownie interpretowany przy każdym dostępie do sieci.
Ale czy możesz „skompilować” kod PHP i załadować plik binarny, który zostanie po prostu uruchomiony przez interpreter kodu bajtowego?
Odpowiedzi:
Po zadaniu tego pytania Facebook uruchomił HipHop dla PHP, który jest prawdopodobnie najlepiej przetestowanym kompilatorem PHP do tej pory (ponieważ jest obsługiwany przez jedną z 10 największych stron internetowych na świecie). Jednak Facebook przerwał na rzecz HHVM, który jest maszyną wirtualną, a nie kompilatorem.
Poza tym googling
PHP compiler
oferuje szereg rozwiązań innych firm.Ciasto brzoskwiniowe
Phalanger
phc
Roadsend PHP Compiler
bcompiler
bcompiler_write_exe_footer()
instrukcja )Project Zero
Bambalam
BinaryPHP
źródło
Krótka odpowiedź brzmi „nie”.
Obecną implementacją PHP jest język interpretowany. Można argumentować teoretyczne aspekty faktu, że każdy język może być technicznie interpretowany lub kompilowany, ale w obecnej postaci obecne implementacje są takie, że kod PHP wymaga do działania tłumacza, a tłumacz zarządza środowiskiem wykonawczym.
Aby odpowiedzieć na pytanie dotyczące przesyłania skompilowanego kodu bajtowego PHP, jest to prawdopodobnie możliwe, ale trzeba by zaimplementować sposób, w jaki interpreter PHP może czytać taki plik i pracować z nim. Przy istniejących już buforach opcode nie wydaje się to zadaniem, które przyniosłoby wiele korzyści.
źródło
include
irequire
? Na przykład, jeśli zwykle dołączany jest skrypt PHP,include( 'controller/' . $controller_name . '.php' )
czy to automatycznie działa z HipHop? na zdrowieThe short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
Nie ma w tym nic teoretycznego, wiele interpretowanych języków ma kompilatory; mianowicie AutoIt / AutoHotkey, a nawet tak daleko jak BASIC. Istnieje wiele programów, które zostały w nich napisane, a następnie skompilowane do użytku publicznego jako samodzielne programy. W PHP nie ma nic specjalnego, co uniemożliwiałoby jego kompilację, dlatego istnieje wiele kompilatorów, ale w przeciwieństwie do AHK, nie ma oficjalnego, przetestowanego kompilatora - Zend Guard nie bardzo się liczy.Od czasu, gdy pytanie zostało zadane po raz pierwszy, nastąpiła zmiana tej odpowiedzi z prostego „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 „eksploduj”)
Znalazłem to pytanie, szukając więcej informacji na temat implementacji HipHop i pomyślałem, że się odezwę :)
Jednak od 2013 r. Facebook już z niego nie korzysta i został wycofany na rzecz HHVM, który nie jest kompilatorem: https://en.wikipedia.org/wiki/HipHop_for_PHP
źródło
pre-analyze
kodu php. W rezultacie otrzymujesz plik Binary-Cache. Dzięki temu plikowi i poprawnej konfiguracji HHVM można uruchomić stronę internetową tylko z kodem bajtowym, nie trzeba już plików źródłowych;) <br> Mam nadzieję, że dobrze to zrobiłem.Jest również
Który ma na celu
Rozszerzenie jest dostępne w PECL.
źródło
phc pozwala kompilować programy PHP we współdzielone biblioteki, które można przesłać na serwer. Program PHP jest skompilowany do plików binarnych. Odbywa się to w taki sposób, aby obsługiwać
eval
s,include
s i całą standardową bibliotekę PHP.źródło
Jeśli po prostu szukasz binarnego pliku wykonywalnego ze skryptu PHP, unikaj sprecyzowania pytania, ponieważ sprawi, że będziesz wiedział, czego dokładnie potrzebujesz. Poza tym większość programistów PHP absolutnie nie ma pojęcia, co to jest kod bajtowy.
Powiedziawszy to, odpowiedź brzmi TAK . Właśnie skończyłem kompilować skrypt PHP w plik binarny. I to nie tylko binarne. Korzystałem z aplikacji CDE (link do Wayback Machine, oryginalny link jest teraz zepsuty), aby przekształcić ją w przenośny plik binarny, który można dystrybuować ze wszystkimi zależnościami i uruchamiać bez żadnych problemów… i działa pięknie.
Wszystko czego potrzebujesz to użyć phc .
źródło
Um, ktoś słyszał o Zend Guard , który robi dokładnie to, o co prosi ta osoba. Koduje / zaciemnia kod PHP do „kodu maszynowego”.
źródło
Istnieje kilka „kompilatorów” kodu PHP. Większość z nich nie obsługuje wszystkich funkcji PHP, ponieważ należy je po prostu interpretować w czasie wykonywania.
Używamy Phalanger - http://www.php-compiler.net/ - który obsługuje nawet te brudne dynamiczne funkcje PHP i nadal jest w stanie skompilować je jako zestaw .NET, który może być dystrybuowany jako samodzielna biblioteka DLL.
źródło
patrz 5.5.x ze zintegrowanym modułem OPcache, niestabilny we wspólnej pamięci, znacznie większa wydajność i zasada dynamiki php pozostają nietknięte.
http://www.php.net/manual/en/opcache.installation.php
źródło
W php 7 dostępna jest opcja php ini opcache.file_cache która zapisuje kod bajtowy w określonym folderze. Może być przydatne w skrypcie php cli, które są „kompilowane” i zapisywane w określonym folderze w celu zoptymalizowanego ponownego wykorzystania.
Opcache nie kompiluje się, ale jest podobny.
źródło
PHP tak naprawdę nie jest kompilowany jak w przypadku wielu programów. Możesz jednak użyć kodera Zend, aby uczynić go nieczytelnym.
źródło
Jeśli możesz uruchamiać prawdziwe natywne pliki binarne, to jest to twój kompilator:
https://github.com/ircmaxell/php-compiler
To kompilator PHP napisany w PHP!
Kompiluje kod PHP do własnego kodu VM. Ten kod maszyny wirtualnej może być następnie zinterpretowany przez własnego tłumacza (również napisany w PHP, prawda?) Lub może zostać przetłumaczony na kod bitowy. Za pomocą frameworka kompilatora LLVM (
clang
i co) ten kod bitowy można skompilować w natywny plik binarny dla dowolnej platformy obsługiwanej przez LLVM (właściwie każdej platformy, która ma dziś znaczenie). Możesz to zrobić statycznie lub za każdym razem tuż przed wykonaniem kodu (styl JIT). Tak więc jedyne dwa wymagania, aby ten kompilator działał w twoim systemie, to zainstalowany interpreter PHP i zainstalowanyclang
kompilator.Jeśli nie możesz uruchamiać natywnych plików binarnych, możesz użyć powyższego kompilatora jako interpretera i pozwolić mu interpretować własny kod maszyny wirtualnej, ale będzie to wolniejsze, ponieważ korzystasz z interpretera PHP, który sam działa na silniku PHP, więc masz „podwójną interpretację”.
źródło
Istnieje także bcgen (port PHP7 bcompiler):
https://github.com/vjardin/bcgen/
(Tylko PHP7.2)
źródło