Saya tahu bahwa PHP dikompilasi ke kode byte sebelum dijalankan di server, dan kemudian kode byte itu bisa di-cache sehingga seluruh skrip tidak harus ditafsirkan ulang dengan setiap akses web.
Tetapi bisakah Anda "mengkompilasi" kode PHP dan mengunggah file biner-ish, yang hanya akan dijalankan oleh penerjemah kode byte?
Jawaban:
Setelah pertanyaan ini diajukan, Facebook meluncurkan HipHop untuk PHP yang mungkin merupakan kompiler PHP teruji terbaik hingga saat ini (mengingat ia menjalankan salah satu dari 10 situs web terbesar di dunia). Namun, Facebook menghentikannya demi HHVM, yang merupakan mesin virtual, bukan kompiler.
Selain itu, googling
PHP compiler
menemukan sejumlah solusi pihak ketiga.Pai Persik
Phalanger
phc
Roadsend PHP Compiler
bcompiler
bcompiler_write_exe_footer()
manual )Project Zero
Bambalam
BinaryPHP
sumber
Jawaban singkatnya adalah "tidak".
Implementasi PHP saat ini adalah bahasa yang ditafsirkan. Anda dapat memperdebatkan aspek teoritis dari fakta bahwa bahasa apa pun secara teknis dapat diartikan atau dikompilasi, tetapi sebagaimana adanya, implementasi saat ini sedemikian rupa sehingga kode PHP memerlukan penerjemah untuk dijalankan, dan penerjemah mengelola lingkungan pelaksana.
Untuk menjawab pertanyaan Anda tentang mengunggah bytecode PHP yang sudah dikompilasi, mungkin saja, tetapi Anda harus menerapkan cara agar penerjemah PHP membaca dalam file seperti itu dan bekerja dengannya. Dengan cache opcode yang ada di luar sana, sepertinya bukan tugas yang akan menuai banyak hadiah.
sumber
include
danrequire
? Misalnya jika skrip PHP biasanya disertakan denganinclude( 'controller/' . $controller_name . '.php' )
apakah ini akan bekerja secara otomatis dengan HipHop? CheersThe short answer is "no". The current implementation of PHP is that of an interpreted language. You can argue the theoretical aspects…
Tidak ada yang teoritis tentang hal itu, banyak bahasa yang ditafsirkan memiliki penyusun; yaitu AutoIt / AutoHotkey, atau bahkan sejauh BASIC. Ada banyak program yang telah ditulis di dalamnya, kemudian disusun untuk digunakan oleh publik sebagai program mandiri. Tidak ada yang istimewa tentang PHP untuk mencegahnya dapat dikompilasi, itulah sebabnya ada banyak kompiler, tetapi tidak seperti AHK, tidak ada kompiler yang resmi, teruji, kompiler — Zend Guard tidak cukup diperhitungkan.Sejak pertanyaan pertama kali diajukan, ada perubahan pada jawaban itu dari flat out "tidak" menjadi "semacam"
http://github.com/facebook/hiphop-php/wiki
Hip Hop untuk PHP adalah kompiler yang mengambil kode PHP dan mengubahnya menjadi C ++ yang sangat dioptimalkan. Rupanya, beberapa fungsi tidak didukung (misalnya 'meledak')
Saya menemukan pertanyaan ini sambil mencari informasi lebih lanjut tentang cara menerapkan HipHop dan berpikir saya akan angkat bicara :)
Sejak 2013 Facebook tidak lagi menggunakannya, dan telah dihentikan demi HHVM, yang bukan kompiler: https://en.wikipedia.org/wiki/HipHop_for_PHP
sumber
pre-analyze
kode php. Akibatnya Anda mendapatkan File Biner-Cache. Dengan file ini dan konfigurasi HHVM yang benar, dimungkinkan untuk menjalankan halaman Web hanya dengan bytecode, tidak perlu lagi untuk file sumber;) <br> Saya harap saya sudah benar.Ada juga
yang bertujuan
Ekstensi tersedia dari PECL.
sumber
phc memungkinkan Anda untuk mengompilasi program PHP ke dalam pustaka bersama, yang dapat diunggah ke server. Program PHP dikompilasi menjadi binari. Ini dilakukan sedemikian rupa untuk mendukung
eval
s,include
s, dan seluruh pustaka standar PHP.sumber
Jika Anda hanya mencari untuk menghasilkan biner yang dapat dieksekusi dari skrip PHP, maka hindari mencoba membuat pertanyaan Anda sangat tepat karena akan membuatnya tampak bahwa Anda tahu persis apa yang Anda butuhkan. Selain itu, sebagian besar pengembang PHP sama sekali tidak memiliki petunjuk tentang apa bytecode itu.
Dengan mengatakan itu, jawabannya adalah YA . Saya baru saja selesai mengkompilasi skrip PHP ke dalam biner. Dan bukan sembarang biner. Saya telah menggunakan aplikasi CDE (tautan ke Wayback Machine, tautan asli sekarang rusak) untuk mengubahnya menjadi biner portabel yang dapat didistribusikan dengan semua dependensi dan dieksekusi tanpa masalah apa pun ... dan berfungsi dengan baik.
Yang Anda butuhkan hanyalah menggunakan phc .
sumber
Um, ada yang mendengar tentang Zend Guard , yang melakukan persis apa yang diminta orang ini. Ini mengkodekan / mengaburkan kode PHP menjadi "kode mesin".
sumber
Ada beberapa "kompiler" kode PHP. Sebagian besar dari mereka tidak mendukung semua fitur PHP, karena ini hanya harus ditafsirkan pada saat run time.
Kami menggunakan Phalanger - http://www.php-compiler.net/ - yang mendukung bahkan fitur dinamis PHP yang kotor, dan masih dapat mengkompilasi mereka sebagai .NET assembly, yang dapat didistribusikan sebagai DLL mandiri.
sumber
lihat 5.5.x dengan modul OPcache terintegrasi, mudah menguap di memori bersama, kinerja lebih banyak dan prinsip dinamika php tetap tidak tersentuh.
http://www.php.net/manual/en/opcache.installation.php
sumber
Di php 7 ada opsi php ini opcache.file_cache yang menyimpan bytecode di folder tertentu. In dapat berguna dalam skrip php cli yang "dikompilasi" dan disimpan dalam folder tertentu untuk digunakan kembali secara optimal.
Opcache itu tidak mengkompilasi tetapi sesuatu yang serupa.
sumber
PHP tidak bisa dikompilasi dengan banyak program. Anda dapat menggunakan encoder Zend untuk membuatnya tidak dapat dibaca.
sumber
Jika Anda diizinkan menjalankan binari asli asli, maka ini adalah kompiler Anda:
https://github.com/ircmaxell/php-compiler
Ini adalah kompiler PHP yang ditulis dalam PHP!
Ini mengkompilasi kode PHP ke kode VM sendiri. Kode VM ini kemudian dapat ditafsirkan oleh penerjemahnya sendiri (juga ditulis dalam PHP, bukankah itu gila?) Atau dapat diterjemahkan ke Bitcode. Dan menggunakan kerangka kerja compiler LLVM (
clang
dan co), Bitcode ini dapat dikompilasi menjadi biner asli untuk setiap platform yang didukung LLVM (hampir semua platform yang penting saat ini). Anda dapat memilih untuk melakukan itu secara statis atau setiap kali tepat sebelum kode dijalankan (gaya JIT). Jadi, hanya dua persyaratan agar kompiler ini bekerja pada sistem Anda adalah juru bahasa PHP yang diinstal danclang
kompiler yang diinstal .Jika Anda tidak diizinkan menjalankan binari asli, Anda bisa menggunakan kompiler di atas sebagai juru bahasa dan membiarkannya mengartikan kode VM sendiri, namun ini akan lambat karena Anda menjalankan juru bahasa PHP yang sendiri berjalan di mesin PHP, jadi Anda memiliki "interpretasi ganda".
sumber
Ada juga bcgen (port bcompiler PHP7):
https://github.com/vjardin/bcgen/
(Hanya PHP7.2)
sumber