PHP kodunu “derleyebilir” ve sadece bayt kodu yorumlayıcısı tarafından çalıştırılacak bir ikili-ish dosyası yükleyebilir misiniz?


225

PHP sunucu üzerinde çalıştırılmadan önce bayt kod için derlenmiş ve daha sonra tüm komut her web erişimi ile yeniden yorumlanması gerekmez böylece bayt kodu önbelleğe alınabilir biliyorum.

Ancak PHP kodunu "derleyebilir" ve sadece bayt kodu yorumlayıcısı tarafından çalıştırılacak bir ikili-ish dosyası yükleyebilir misiniz?



3
Lütfen bunu hhvm veya hiphop ile etiketlemeyin . HHVM sorunun doğal bir parçası değildir, sadece olası bir cevaptır. meta.stackexchange.com/a/149347/238706
Palec

@HalayemAnis Sanırım yanlış bir bağlantıdan bahsediliyor .. Bu eğitim için doğru bağlantıyı sağlayabilir misiniz? veya en son güncelleme çocuklar?
CJ Ramki

@CJRamki üzgünüm, lütfen bu bağlantıyı kullanın COMPILE_PHP
Halayem Anis

Bu soru aslında oldukça belirsiz. Kaynak kodunuzu (ve tam anlamıyla) bir PHP derleyicisini bir ELF, EXE veya başka bir şekilde derleyen bir PHP derleyicisi "basitçe" oluşturabilirsiniz .
Sebastian Mach

Yanıtlar:


234

Bu soru sorulduktan sonra, Facebook bugüne kadar muhtemelen en iyi test edilmiş PHP derleyicisi olan PHP için HipHop'ı başlattı (dünyanın en büyük 10 web sitesinden birini çalıştırdığını görerek). Ancak Facebook, derleyici değil, sanal bir makine olan HHVM lehine durdurdu.

Bunun ötesinde, googling PHP compilerbir dizi 3. taraf çözümü ortaya çıkarır .

Şeftalili turta

  • PeachPie GitHub
  • PHP'yi .NET ve .NET Core'a derler
  • bağımsız ikili dosyada derlenebilir
  • Mac, Linux, Windows, Windows Core, ARM, ... üzerinde çalışır

Phalanger

  • GitHub (indir), Wikipedia
  • .NET (CIL) için derlemeler Temmuz 2017'den itibaren sonlandırılıyor ve PHP 7'yi desteklemiyor gibi görünüyor.

phc

  • yerel ikili dosyaları derler
  • çok aktif değil (Şubat 2014) - 2011'in son sürümü, 2013 yazında son değişiklik

Roadsend PHP Derleyici

bcompiler

  • PHP'nin PECL uzantısı
  • deneysel
  • PHP bayt kodunu derler, ancak PHP yorumlayıcısını yükleyen Windows ikili dosyasında sarabilir ( bcompiler_write_exe_footer()kılavuza bakınız )
  • şimdi durdurulan görünüyor (Şubat 2014) - 2011'deki son değişiklik

Sıfır Projesi

  • Wikipedia , IBM
  • WebSphere sMash için değişiklik inkübatörü
  • IBM tarafından desteklenir
  • Java bayt kodunu derler
  • artık üretilmiyor (Şubat 2014) - web sitesi kapandı, 2008 ve 2009'da büyük bir aldatmaca gibi görünüyor

Bambalam

  • tek başına Windows ikili dosyalarını derler
  • ikili dosyalar bayt kodu ve bir başlatıcı içerir
  • şimdi durdurulan görünüyor (Şubat 2014) - 2006'daki son değişiklik

BinaryPHP

  • C ++ ile derler
  • artık üretilmiyor (Şubat 2014) - 2003'teki son değişiklik

Paylaşılan web barındırıcısı ne olacak? PHP betiğimi bu derleyicilerden biriyle derleyip linux tabanlı web sunucuma yükleyebilir miyim?
SaidbakR

2
@ sємsєм sunucunuza bağlıdır, ama tahmin etmek zorunda olsaydım, birçok ana bilgisayar izin vermez tahmin ediyorum.
Frank Farmer

2
Yukarıdaki projelerin hiçbiri artık sürdürülmedi. Son 2 yıldan beri genel kabul görmüş bir derleyici var mı veya tüm bu projeler neden dikkate alınmıyor / terkediliyor?
Preexo

Bir PHP derleyicilerinde güzel listesi thefreecountry.com yer almaktadır. Burada bahsedilen tüm araçlar şimdi bu cevaba dahil edilmiştir.
Palec

1
Bunların hepsi ölü göründüğünden, cevap "hayır" gibi görünüyor.
Ira Baxter

22

Kısa cevap "hayır" dır.

PHP'nin şu anki uygulaması yorumlanmış bir dildir. Herhangi bir dilin teknik olarak yorumlanabildiği veya derlenebileceği gerçeğinin teorik yönlerini tartışabilirsiniz, ancak mevcut uygulamalar PHP kodunun çalıştırılması için bir tercüman gerektirecek ve tercüman yürütme ortamını yönetecek şekildedir.

Önceden derlenmiş PHP bayt kodunu yüklemekle ilgili sorunuzu cevaplamak için muhtemelen mümkündür, ancak PHP yorumlayıcısının böyle bir dosyayı okuması ve onunla çalışması için bir yol uygulamanız gerekir. Zaten orada mevcut opcode önbellekleri ile, çok ödül alacak bir görev gibi görünmüyor.


3
Genellikle PHP programlarını düzgün bir şekilde çalıştırmak için bir tercümana ihtiyaç duyduğunuz durumdur, ancak bu bir derleyicinin derlenmiş kodda sağlayamayacağı anlamına gelmez. phc (phpcompiler.org) açıkladığınız tüm sorunları ele alır. Bildiğim kadarıyla Roadsend (roadsend.com) da biliyor.
Paul Biggar

28
Bu yanıt güncel değil - HipHop, Şubat 2010'da yayınlandıktan 6 ay sonra yayınlandı.
Frank Farmer

1
@FrankFarmer HipHop ile ilgili bir deneyiminiz oldu mu? HipHop includeve ile düzgün çalışıyor mu require? Örneğin, genellikle bir PHP betiği eklenmişse include( 'controller/' . $controller_name . '.php' ), bu otomatik olarak HipHop ile çalışır mı? şerefe
Lea Hayes

2
Aslında normal PHP derleyicilerini kullanarak PHP kodunu derleyebilirsiniz. Sadece hedef platforma bağlıdır; Zend opcode, C dili veya .NET derlemelerine (Phalanger php-compiler.net kullanarak ) derleyebilirsiniz
Jakub Míšek

1
The short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…Bu konuda teorik bir şey yok, birçok yorumlanmış dilde derleyici var; viz AutoIt / AutoHotkey, hatta BASIC kadar geri. Bunlarda yazılmış ve daha sonra halk tarafından bağımsız programlar olarak kullanılmak üzere derlenmiş birçok program vardır. PHP'nin derlenmesini önlemek için özel bir şey yoktur, bu yüzden bir sürü derleyici vardır, ancak AHK'nin aksine resmi, test edilmiş, derleyici yoktur - Zend Guard tam olarak sayılmaz.
Synetech

16

Soru ilk sorulduğundan beri, bu cevapta "düz" ten "tür" e bir değişiklik olmuştur.

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

PHP için Hip Hop, PHP kodunu alan ve son derece optimize C ++ 'a dönüştüren bir derleyiciydi Görünüşe göre, bazı işlevler desteklenmiyor (örneğin' patlayabilir ')

Bu soruyu HipHop'un nasıl uygulanacağı hakkında daha fazla bilgi ararken buldum ve konuşacağımı düşündüm :)

Ancak 2013'ten beri Facebook artık kullanmıyor ve derleyici olmayan HHVM lehine durduruldu: https://en.wikipedia.org/wiki/HipHop_for_PHP


3
facebook inanıyorum bu kullanır
Richard H

"Tür" şimdi birkaç yıl geride yatıyor ve HHVM (HipHop Php) her geçen gün daha iyi ve daha iyi hale geldiği için, son olarak bir yolu var (sanırım). HHVM kullanarak bugünlerde pre-analyzephp kodu mümkündür . Sonuç olarak bir İkili Önbellek Dosyası alırsınız. Bu dosya ve doğru HHVM yapılandırması ile, artık bir bayt kodu ile bir Web sayfası çalıştırmak mümkündür, artık kaynak dosyalara gerek yok;) <br> Umarım doğru anladım.
PKeidel

@Andrea, HHVM'nin kullanımdan kaldırılmasıyla ne demek istiyorsun? Bir proje olarak bakımlı ve canlı görünüyor. Yoksa PHP için Hip Hop adından HHVM olarak mı değiştiniz? O zaman itiraz hakkında konuşmak yanıltıcıdır.
Palec

1
PHP için @Palec HipHop kullanımdan kaldırıldı. Facebook'un kullandığı bir PHP-C ++ derleyicisiydi, ancak uygunsuz çıktı (çoklu GB ikili dosyaları) üretti ve tam dili destekleyemedi. HHVM, aynı kodun bir kısmını paylaşan ancak bir derleyici olmayan bir halef projesidir. HHVM sanal bir makinedir. Facebook artık HipHop'u desteklemiyor.
Andrea

11

Ayrıca birde şu var

hangi amaçlar

  • Özel bir PHP uygulamasında tüm komut dosyasını kodlamak için
  • Tescilli bir PHP uygulamasındaki bazı sınıfları ve / veya işlevleri kodlamak için
  • Bir php.exe'ye ihtiyaç duymadan istemci masaüstlerinde kullanılabilecek php-gtk uygulamalarının üretimini etkinleştirmek için.
  • PHP'den C'ye dönüştürücü için fizibilite çalışması yapmak

Uzantı PECL'den edinilebilir.


8

phc , PHP programlarını sunucuya yüklenebilen paylaşılan kitaplıklarda derlemenizi sağlar. PHP programı ikili dosyalara derlenmiştir. Bu eval, includes, s ve tüm PHP standart kütüphanesini destekleyecek şekilde yapılır .


8

Sadece bir PHP betiğinden bir ikili çalıştırılabilir dosya arıyorsanız, lütfen sorunuzu son derece hassas hale getirmeye çalışmaktan kaçının çünkü tam olarak neye ihtiyacınız olduğunu bileceksiniz. Ayrıca, çoğu PHP geliştiricisi bir bayt kodunun ne olduğu konusunda kesinlikle sıfır ipucuna sahiptir.

Bununla birlikte, cevaplar EVET . Ben sadece bir PHP betiği bir ikili derleme bitirdim. Ve sadece herhangi bir ikili değil. Ben tüm bağımlılıklar ile dağıtılabilir ve herhangi bir sorun olmadan çalıştırılabilir taşınabilir bir ikili dönüştürmek için CDE uygulamasını (Wayback Machine bağlantı , orijinal bağlantı şimdi kırık) kullandım ve güzel çalışıyor.

İhtiyacınız olan tek şey phc kullanmak .



2

PHP kodunun birkaç "derleyicisi" vardır. Çoğu, tüm PHP özelliklerini desteklemez, çünkü bunlar çalışma zamanında yorumlanmalıdır.

Bu kirli PHP dinamik özelliklerini bile destekleyen ve yine de bağımsız bir DLL olarak dağıtılabilen .NET derlemesi olarak derleyebilen Phalanger - http://www.php-compiler.net/ - kullanıyoruz .



1

Php 7'de bayt kodunu belirli bir klasöre kaydeden php ini opcache.file_cache seçeneği vardır . Içinde optimize edilmiş yeniden kullanım için "derlenmiş" ve belirli bir klasöre kaydedilen php cli komut dosyası için yararlı olabilir.

Opcache derlemiyor ama benzer bir şey.


"Php 7" sadece PHP7 değil, PHP 5.5.0 ve üstü
Raymond Nijland

0

PHP pek çok programda olduğu gibi derlenmez. Yine de okunamaz hale getirmek için Zend'in kodlayıcısını kullanabilirsiniz.


perl'in derlendiği şekilde derlenmiyor mu?
Carson Myers

PHP sunucu üzerinde inanıyorum anında derlenir. Kaynak kodunu gizlemek için bir kodlayıcı kullandım. Eğer endişelenen şey buysa. Gerçekten iyi çalışıyorlar.
Joe

Hayır, sadece teorik yönü ile ilgileniyordum
Carson Myers

2
PHP yorumlanmamış bir dildir. önbellek 'opcodes' whitch php yorumlar (metin okumak zorunda değil) içerir, php kodu c
borrel

0

Gerçek yerel ikili dosyalar çalıştırma izniniz varsa, bu sizin derleyicinizdir:

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

PHP ile yazılmış bir PHP derleyicisi !

PHP kodunu kendi VM koduyla derler. Bu VM kodu daha sonra kendi yorumlayıcısı tarafından yorumlanabilir (PHP'de de yazılmıştır, çılgınca değil mi?) Veya Bitcode'a çevrilebilir. Ve LLVM derleyici çerçevesini ( clangve co) kullanarak, bu Bitcode, LLVM'nin desteklediği herhangi bir platform için (bugün önemli olan herhangi bir platform) yerel bir ikili dosyaya derlenebilir. Bunu statik olarak veya kod yürütülmeden hemen önce (JIT stili) yapmayı seçebilirsiniz. Bu derleyicinin sisteminizde çalışması için yalnızca iki gereksinim yüklü bir PHP yorumlayıcısı ve yüklü birclang derleyicidir.

Yerel ikili dosyaları çalıştırma izniniz yoksa, yukarıdaki derleyiciyi bir yorumlayıcı olarak kullanabilir ve kendi VM kodunu yorumlamasına izin verebilirsiniz, ancak kendisi bir PHP motorunda çalışan bir PHP yorumlayıcısı çalıştırdığınızda bu yavaş olacaktır. bir "çifte yorumunuz" var.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.