Czy możesz "skompilować" kod PHP i przesłać plik binarny, który będzie uruchamiany przez interpreter kodu bajtowego?
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ć" kod PHP i przesłać plik binarny, który będzie uruchamiany przez interpreter kodu bajtowego?
13 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.
- PeachPie GitHub
- kompiluje PHP do. NET i. NET Core
- można skompilować do samodzielnego pliku binarnego
- Działa na Mac, Linux, Windows, Windows Core, ARM, ...
- GitHub (download), Wikipedia
- Kompilacja do. NET (CIL) wygląda na przerwaną od lipca 2017 i wydaje się, że nie obsługuje PHP 7.
- kompiluje do natywnych binariów
- nie bardzo aktywny teraz (luty 2014) - Ostatnia wersja w 2011, Ostatnia zmiana latem 2013
- GitHub, GitHub of a rewrite
- Darmowa, open source implementacja PHP z kompilatorem
- kompiluje do natywnych binariów (Windows, Linux)
- przerwane od 2010 roku do czasu znalezienia współpracowników {–10]} - strona nie działa, pozostaje na Githubie, gdzie ostatnia zmiana pochodzi z początku 2012 roku
- rozszerzenie PECL of 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
- Wikipedia, IBM
- inkubator zmian dla WebSphere sMash
- obsługiwane przez IBM
- kompiluje do kodu bajtowego Javy
- wygląda obecnie (luty 2014) - strona w dół, wygląda jak duży szum w 2008 i 2009
- kompiluje do samodzielnych binariów Windows
- pliki binarne zawierają bytecode i launcher
- wygląda wycofane teraz (luty 2014) - Ostatnia zmiana w 2006
- kompiluje do C++
- wygląda wycofane teraz (luty 2014) - Ostatnia zmiana w 2003
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
2020-06-02 13:12:46
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.
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
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.
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ć eval
s, include
s i całą bibliotekę standardową PHP.
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
Ktoś słyszał o Zend Guard, który robi dokładnie to, o co prosi ta osoba. Koduje / zaciemnia kod PHP do "kodu maszynowego".
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
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 .
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
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.
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.
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.
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
Jeśli możesz uruchamiać prawdziwe natywne binaria, 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 maszyny wirtualnej. Ten kod maszyny wirtualnej może być następnie interpretowany przez własny interpreter (również napisany w PHP, czy to nie szalone?) lub może być przetłumaczony na Bitcode. I używając frameworka kompilatora LLVM (clang
i co), ten Bitcode można skompilować do natywny binarny dla każdej platformy obsługiwanej przez LLVM(praktycznie każdej platformy, która ma dziś znaczenie). Możesz to zrobić statycznie lub za każdym razem tuż przed wykonaniem kodu (styl JIT). Więc jedyne dwa wymagania dla tego kompilatora do pracy na Twoim systemie To zainstalowany interpreter PHP i zainstalowany kompilator clang
.
Jeśli nie możesz uruchamiać natywnych binariów, możesz użyć powyższego kompilatora jako interpretera i pozwolić mu zinterpretować własny kod maszyny wirtualnej. bądź powolny, ponieważ używasz interpretera PHP, który sam działa na silniku PHP, więc masz "podwójną interpretację".
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
2020-04-01 09:58:52
PHP tak naprawdę nie jest kompilowany jak w przypadku wielu programów. Możesz jednak użyć kodera Zend, aby uczynić go nieczytelnym.
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
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
2020-06-26 12:37:18