Cara kompilasi file php

Apakah ada cara saya dapat mengkompilasi atau mengaburkan kode PHP sehingga masih dapat berjalan di server tetapi tidak dapat dilihat/diedit/dimodifikasi seperti perangkat lunak yang dikompilasi?

Tidak

Agar kode dapat berjalan di server, CPU harus memahaminya. CPU jauh lebih bodoh daripada manusia. Jika CPU bisa memahaminya, maka manusia juga bisa. Jika Anda membuatnya sehingga manusia tidak dapat memahami kodenya, maka CPU juga tidak dapat melakukannya, dan Anda tidak dapat lagi menjalankannya

Ngomong-ngomong. semua implementasi PHP yang ada saat ini (Zend Engine, HVVM, P8, Quercus, Phalanger, Peachpie, HippyVM, Tagua VM, JPHP, …) sebenarnya akan mengkompilasi kode PHP Anda

Atau satu-satunya pilihan teknis untuk beralih ke bahasa pemrograman yang dikompilasi seperti Java?

Tidak

Tidak ada bedanya. Kode harus ada di server dalam bentuk yang dapat dipahami oleh server. Tapi kemudian, manusia juga bisa memahaminya

Satu-satunya solusi yang mungkin untuk memastikan bahwa seseorang tidak dapat mengakses kode Anda adalah … tidak memberi mereka akses ke kode Anda. Sesederhana itu

Cara termudah untuk mencapai ini adalah dengan menyimpan kode di tempat Anda dan hanya menawarkan akses ke sana melalui layanan yang dikontrol dengan ketat. Begitulah cara Google merahasiakan kodenya, misalnya

Cara yang jauh lebih sulit dan lebih mahal adalah dengan memiliki enkripsi kode Anda secara menyeluruh. Pada dasarnya, Anda mengirimkan server sebagai kotak hitam yang tidak dapat dirusak dan tidak dapat ditembus yang hanya memungkinkan akses melalui layanan yang dikontrol dengan ketat. Triknya di sini adalah memastikan bahwa kotak hitam benar-benar tetap "hitam". Ini mengharuskan Anda memiliki kendali penuh atas Sistem Operasi, semua perpustakaan, CPU, motherboard, RAM, semua bus dan chip I/O dalam sistem, dan sebagainya.

Ingat XBox? . Mereka pikir ini akan baik-baik saja karena tidak ada perangkat keras yang dapat mengintai bus berkecepatan tinggi seperti itu. Nah, ternyata jika Anda memiliki osiloskop $10000000 dan banyak waktu di tangan Anda, Anda benar-benar dapat mengintai bus itu, dan seperti yang terjadi, MIT telah menemukan osiloskop semacam itu, mahasiswa MIT memiliki banyak waktu di tangan mereka

Ngomong-ngomong. tidak ada yang namanya "bahasa pemrograman yang dikompilasi". Kompilasi atau interpretasi adalah ciri-ciri penyusun atau juru bahasa (duh. ), bukan bahasanya. Mereka hidup pada tingkat abstraksi yang sangat berbeda. Jika bahasa Inggris adalah bahasa yang diketik, istilah "bahasa pemrograman yang dikompilasi" akan menjadi kesalahan ketik. Setiap bahasa dapat diimplementasikan dengan kompiler dan setiap bahasa dapat diimplementasikan dengan juru bahasa. Misalnya, semua implementasi utama PHP, JavaScript, Python, dan Ruby yang ada saat ini memiliki kompiler. Sebaliknya, ada juru bahasa untuk C, C++ dan Haskell

Setelah menginstal PHP, kami siap menjalankan kode PHP melalui baris perintah. Anda tinggal mengikuti langkah-langkah untuk menjalankan program PHP menggunakan baris perintah

  • Buka terminal atau jendela baris perintah
  • Pergi ke folder atau direktori yang ditentukan di mana file php ada
  • Kemudian kita dapat menjalankan kode php menggunakan perintah berikut. php file_name.php

  • Kami juga dapat memulai server untuk menguji kode php menggunakan baris perintah dengan perintah berikut. php -S localhost:port -t your_folder/_

Catatan. Saat menggunakan server bawaan PHP, nama file PHP di dalam folder root harus index. php, dan semua file PHP lainnya dapat di-hyperlink melalui halaman indeks utama

PHP adalah bahasa skrip sisi server yang dirancang khusus untuk pengembangan web. Anda dapat mempelajari PHP dari bawah ke atas dengan mengikuti Tutorial PHP dan Contoh PHP ini

Mengkompilasi PHP dari sumbernya lebih mudah daripada kedengarannya. Ini adalah panduan yang lebih ramah pemula tentang cara mengambil sumbernya dari GitHub, menginstal yang diperlukan untuk kompilasi, kompilasi, dan uji coba PHP

PHP sudah tersedia untuk diunduh dan dipasang di banyak sistem operasi, termasuk Windows, Debian/Ubuntu, Fedora, Mac OS, dll. Menginstal dari sumber tersebut tidak memerlukan kompilasi PHP, karena sudah dikompilasi, dan siap untuk diinstal. Selanjutnya, mereka sering berisi berbagai ekstensi PHP sebagai paket yang dapat diinstal terpisah, sehingga mudah untuk menyesuaikan waktu proses PHP dengan kombinasi ekstensi PHP apa pun.

Panduan ini berfokus pada kompilasi PHP dari kode sumbernya, jadi mudah untuk mencoba fitur baru yang belum dirilis. Formulir yang dikompilasi akan cocok untuk pengujian, daripada menggunakannya di server produksi


Versi singkat panduan untuk kesenangan salin-tempel tersedia di

  • Penyiapan awal penginstalan alat build (seperti kompiler dan pustaka) akan memakan waktu sekitar lima menit. Di Ubuntu 21 yang baru. 04 penginstalan, diperlukan pengunduhan file ~210 MB. Ini adalah pengaturan satu kali

  • Repositori Git PHP di cabang git clone //github.com/php/php-src.git --branch=master_9 (cabang untuk versi terbaru dan yang akan datang) berukuran sekitar 420 MB pada saat penulisan. Setelah repositori Git dikloning, perubahan baru dapat ditarik tanpa harus mengunduh seluruh repositori berulang kali

  • Membangun skrip konfigurasi dan mengonfigurasi build akan memakan waktu sekitar satu menit. Proses ini sebagian besar memeriksa apakah semua dependensi yang diperlukan ada di sistem

  • Mengkompilasi PHP dapat berlangsung dari 2 menit hingga 15-20 menit, tergantung pada jumlah inti/utas CPU dan kecepatannya. Pada 8-core 16 thread CPU pada 2. 9 GHz, biasanya membutuhkan waktu 2 menit untuk menyelesaikannya. Pada CPU yang sama hanya menggunakan satu inti CPU saja, dibutuhkan ~16 menit untuk dikompilasi

1. Prasyarat

Panduan ini tentang mengkompilasi PHP dari sumbernya, di Debian 9 (Stretch) atau lebih baru atau Ubuntu 18. 04 (Berang-berang Bionik) atau lebih baru. Ini diuji untuk bekerja pada versi Debian hingga 10 (Buster) dan versi Ubuntu hingga 21. 04 (Hirsute Hippo)

Menggunakan Fedora/RHEL/CentOS?
Lihat Cara mengkompilasi PHP dari sumber di Fedora/RHEL/dll

Untuk sumber PHP dan alat bangun, koneksi jaringan yang mampu mengunduh ~ 600 MB diperlukan untuk proses pertama. Setiap build berikutnya hanya akan mengunduh komit baru dari GitHub, dan akan berada dalam kisaran hanya beberapa kilobyte hingga satu atau dua megabyte. Pastikan ruang disk tersisa minimal 1 GB

Kode sumber PHP dikontrol versi menggunakan Git, dan tersedia untuk diunduh melalui HTTP sebagai arsip zip, atau sebaiknya menggunakan Git. Kode sumber tersedia di GitHub, yang sekarang menjadi sumber kanonis

Opsional. Mesin/wadah virtual
Mengompilasi PHP dan mengujinya di mesin virtual membuat semuanya jadi lebih mudah dan bersih. Jika memungkinkan, pastikan untuk mengikuti panduan selanjutnya di mesin virtual atau wadah

  • Untuk pengguna Windows, WSL2 yang menjalankan Ubuntu akan menjadi pendekatan yang paling mudah
  • Mesin virtual yang menjalankan Ubuntu/Debian, menggunakan Virtual Box, tersedia di beberapa sistem operasi termasuk Windows dan Mac OS
  • Berjalan di gambar buruh pelabuhan Ubuntu

Opsional. Akun GitHub dengan Akses SSH
Dimungkinkan untuk mengunduh sumber PHP dari repositori Git yang dihosting di GitHub. Ini memungkinkan pengunduhan kode sumber tanpa otentikasi apa pun

Untuk berkontribusi pada proyek PHP, diperlukan akun GitHub untuk melakukan fork dan membuat pull request. Ini adalah langkah sederhana dan satu kali untuk mendaftar dan mengautentikasi diri Anda ke GitHub melalui SSH, dan prosesnya didokumentasikan di dokumentasi GitHub

2. Instal Alat Bangun

Semua alat dasar untuk mengompilasi versi minimal PHP dapat diinstal dalam sekali jalan

Semua perintah yang dimulai dengan git clone git@github.com:php/php-src.git --branch=master_0 mungkin memerlukan konfirmasi kata sandi sesekali

sudo apt install build-essential autoconf libtool bison re2c pkg-config_


Bergantung pada perangkat lunak yang tersedia di sistem, perangkat lunak ini dapat diunduh mulai dari 0 hingga ~220 MB

  • git clone git@github.com:php/php-src.git --branch=master1 menyertakan alat seperti git clone git@github.com:php/php-src.git --branch=master2, kompiler GNU C, dan git clone git@github.com:php/php-src.git --branch=master3, utilitas untuk mengarahkan skrip kompilasi
  • git clone git@github.com:php/php-src.git --branch=master4 digunakan untuk menghasilkan skrip git clone git@github.com:php/php-src.git --branch=master5 yang digunakan nanti dalam kompilasi
  • git clone git@github.com:php/php-src.git --branch=master6 adalah alat yang membantu mengelola dan menemukan perpustakaan bersama
  • git clone git@github.com:php/php-src.git --branch=master7 adalah generator parser yang kompatibel dengan YACC
  • git clone git@github.com:php/php-src.git --branch=master8 adalah alat yang digunakan untuk menghasilkan lexer PHP

Perhatikan bahwa ini adalah daftar alat minimum mutlak. Ekstensi PHP tambahan memerlukan dependensi tambahan, yang dijelaskan nanti dalam panduan ini di bawah setiap ekstensi

3. Sumber Git Clone PHP

Dengan alat build terpasang, sekarang saatnya mengunduh kode sumber PHP dari repositori Git

Sumber PHP tersedia di repositori Git yang dihosting di github. com/php/php-src

git clone //github.com/php/php-src.git --branch=master

Jika SSH dikonfigurasi dengan GitHub, dimungkinkan dan untuk mengkloning SSH juga

git clone git@github.com:php/php-src.git --branch=master


Opsi git clone git@github.com:php/php-src.git --branch=master_9 untuk Git mempersempit operasi kloning ke cabang git clone //github.com/php/php-src.git --branch=master_9. Ini dapat sedikit mengurangi ukuran unduhan, karena melewatkan komit yang bukan milik cabang lain

Kloning yang dangkal dapat secara dramatis mengurangi ukuran unduhan dan waktu kloning dengan tidak menyertakan komitmen historis apa pun. Ini ideal untuk pengujian satu kali, tetapi klon dangkal tidak memungkinkan membuat komit tambahan karena riwayat komit tidak tersedia. Untuk membuat tiruan dangkal, gunakan opsi git clone //github.com/php/php-src.git --depth=11

git clone //github.com/php/php-src.git --depth=1

Setelah selesai, git clone //github.com/php/php-src.git --depth=1_2 ke direktori git clone //github.com/php/php-src.git --depth=13 yang berisi sumber PHP

cd php-src

4. Buat skrip git clone git@github.com:php/php-src.git --branch=master_5

Repositori sumber PHP menyertakan skrip yang menghasilkan file git clone //github.com/php/php-src.git --depth=15 baru

./buildconf

5. Konfigurasikan build

skrip git clone //github.com/php/php-src.git --depth=1_5 berisi lusinan opsi untuk menyesuaikan build PHP

Menjalankan git clone //github.com/php/php-src.git --depth=1_7 menampilkan seluruh daftar opsi yang tersedia untuk digunakan

./configure --help

Bendera yang ditampilkan di git clone //github.com/php/php-src.git --depth=1_7 mengikuti pola git clone //github.com/php/php-src.git --depth=19, cd php-src0, atau cd php-src1. Itu menerima banyak flag, dan seringkali sangat panjang di sebagian besar pengaturan PHP yang disiapkan untuk penggunaan produksi

contoh

./configure --enable-ftp --with-openssl --disable-cgi

git clone //github.com/php/php-src.git --depth=1_9

Jika bendera diteruskan, ekstensi/SAPI dengan nama cd php-src3 akan diaktifkan. Menggunakan pola cd php-src_4 membuat ekstensi dikompilasi ke file terpisah sehingga dapat diaktifkan/dinonaktifkan dari file PHP INI

Misalnya, menjalankan cd php-src_5 mengaktifkan ekstensi FTP. menjalankan cd php-src_6 memungkinkan ekstensi untuk dikompilasi sebagai ekstensi bersama;

Tidak semua ekstensi mendukung kompilasi ke ekstensi bersama

Selain ekstensi, opsi git clone //github.com/php/php-src.git --depth=19 tersedia untuk API Server (SAPI) dan juga fitur khusus. Khususnya, ./buildconf_0 mengaktifkan fitur keamanan thread dalam build

cd php-src1

Opsi ini mirip dengan pola git clone //github.com/php/php-src.git --depth=1_9 yang mengaktifkan berbagai ekstensi dan fitur PHP. Perlu diperhatikan bahwa ekstensi/fitur ini sering kali memerlukan dependensi tambahan

Misalnya, ekstensi OpenSSL, diaktifkan dengan ./buildconf3 bergantung pada file pengembangan pustaka OpenSSL. Di sistem Ubuntu/Debian, mereka dapat dengan mudah diinstal dengan paket ./buildconf4. Akhiran ./buildconf_5 untuk nama paket menunjukkan bahwa itu adalah paket pengembangan. Untuk memenuhi persyaratan ekstensi OpenSSL, instal paket ./buildconf4

sudo apt install libssl-dev


Daftar persyaratan ekstensi terbaru tercantum di bagian panduan ini

cd php-src0 dan ./buildconf8

Kebalikan dari git clone //github.com/php/php-src.git --depth=1_9 bendera. Kehadiran flag ini berarti PHP dikonfigurasi untuk menyertakan ekstensi/fitur/SAPI tersebut secara default, kecuali opsi cd php-src0 dilewatkan

Selain itu, bendera ./configure --help1 menonaktifkan semua ekstensi, yang memungkinkan daftar kosong untuk masing-masing ekstensi diaktifkan dengan bendera git clone //github.com/php/php-src.git --depth=19

Secara default, PHP mengkompilasi dengan dukungan SQLite bawaan. Menonaktifkan ekstensi SQLite3 memungkinkan kompilasi PHP tanpa harus menginstal dependensi SQLite3

./configure --without-sqlite3 --without-pdo-sqlite

Build selanjutnya

Membuat perintah git clone //github.com/php/php-src.git --depth=1_5 itu rumit. Saat skrip git clone //github.com/php/php-src.git --depth=15 dijalankan, ia menyimpan perintah ke file ./configure --help5, yang mengeksekusi perintah yang sama persis seperti sebelumnya, plus menambahkan opsi tambahan

Setelah proses git clone //github.com/php/php-src.git --depth=1_5 pertama selesai, menggunakan file ./configure --help5 membantu menghindari mengetik opsi git clone //github.com/php/php-src.git --depth=15 yang sama berulang kali

git clone //github.com/php/php-src.git --branch=master0

6. Menyusun

Setelah skrip git clone //github.com/php/php-src.git --depth=15/./configure --help5 selesai, sekarang saatnya menjalankan kompiler

Bergantung pada inti dan utas CPU yang tersedia, ini dapat berlangsung dalam kisaran dari 2 menit hingga 15-20 menit

git clone //github.com/php/php-src.git --branch=master1

Perintah git clone git@github.com:php/php-src.git --branch=master_3 digunakan untuk menjalankan kompilasi menggunakan kompiler C. Ia menerima parameter ./configure --enable-ftp --with-openssl --disable-cgi_2, yang dapat digunakan untuk mengonfigurasi pemrosesan paralel. Keluaran dari perintah ./configure --enable-ftp --with-openssl --disable-cgi3, yang mengembalikan jumlah utas CPU yang tersedia dalam sistem kemudian disetel untuk parameter ./configure --enable-ftp --with-openssl --disable-cgi4

Jika opsi ./configure --enable-ftp --with-openssl --disable-cgi2 tidak ada, ini akan menggunakan satu utas CPU secara default. Untuk mengatur jumlah utas tertentu, cukup tentukan nomor untuk opsi ./configure --enable-ftp --with-openssl --disable-cgi2

git clone //github.com/php/php-src.git --branch=master2

7. Pasang/coba

Binari yang dikompilasi akan tersedia di direktori ________32______7. Untuk segera menjalankan PHP CLI, misalnya, panggil biner ./configure --enable-ftp --with-openssl --disable-cgi8

git clone //github.com/php/php-src.git --branch=master_3

CLI interaktif PHP dibuka menggunakan parameter ./configure --enable-ftp --with-openssl --disable-cgi9

git clone //github.com/php/php-src.git --branch=master_4

Bergantian, versi PHP yang dikompilasi dapat diinstal pada sistem, sehingga alat lain dapat dengan mudah menggunakan biner sudo apt install libssl-dev0 di PATH

git clone //github.com/php/php-src.git --branch=master5

Berikut adalah argumen baris perintah yang diteruskan ke skrip git clone //github.com/php/php-src.git --depth=15 untuk mengaktifkan/menonaktifkan/mengonfigurasi ekstensi dan fitur PHP

Ekstensi berikut adalah ekstensi inti PHP, dan tidak dapat dinonaktifkan. Versi PHP yang lebih lama mungkin memiliki flag untuk mengaktifkan ekstensi ini, tetapi tidak valid lagi untuk ekstensi ini

ExtensionNotesDateHashCore ekstensi sejak PHP 7. Ekstensi 4JSONCore sejak PHP 8. 0PCREPass sudo apt install libssl-dev_2 ke kompilasi Just-In-Time. Sejak PHP 7. 3, menggunakan ekstensi PCRE2ReflectionSPLCore sejak PHP 5. 3

Ekstensi berikut diaktifkan secara default, tetapi dapat dinonaktifkan jika perlu. Bendera ./configure --help_1 juga menonaktifkan semuanya

ExtensionDisable flagCtypesudo apt install libssl-dev4Fileinfosudo apt install libssl-dev5Filtersudo apt install libssl-dev6Opcachesudo apt install libssl-dev7, or sudo apt install libssl-dev8 to disable JITPDOsudo apt install libssl-dev9Phar./configure --without-sqlite3 --without-pdo-sqlite0POSIX./configure --without-sqlite3 --without-pdo-sqlite1Session./configure --without-sqlite3 --without-pdo-sqlite2SimpleXML./configure --without-sqlite3 --without-pdo-sqlite3SQLite./configure --without-sqlite3 --without-pdo-sqlite4Tokenizer./configure --without-sqlite3 --without-pdo-sqlite5XML./configure --without-sqlite3 --without-pdo-sqlite6XMLReader./configure --without-sqlite3 --without-pdo-sqlite7XMLWriter./configure --without-sqlite3 --without-pdo-sqlite8

Mengompilasi ekstensi tambahan sering kali membutuhkan ketergantungannya. Berikut adalah daftar ekstensi PHP dan dependensinya, dan flag git clone //github.com/php/php-src.git --depth=15 untuk mengaktifkannya

Kolom Ketergantungan mencantumkan nama paket di repositori Ubuntu/Debian. Instal menggunakan manajer paket

Apakah mungkin untuk mengkompilasi PHP?

phc memungkinkan Anda mengompilasi program PHP ke dalam pustaka bersama , yang dapat diunggah ke server. Program PHP dikompilasi menjadi binari. Itu dilakukan sedemikian rupa untuk mendukung eval s, include s, dan seluruh pustaka standar PHP.

Bagaimana cara menjalankan file PHP?

php” ditempatkan di dalam folder “htdocs”. Jika Anda ingin menjalankannya, buka browser web apa saja dan masukkan “localhost/demo. php” dan tekan enter . Program Anda akan berjalan.

Bagaimana cara mengkompilasi PHP dari sumber?

Mempersiapkan lingkungan. paket yang diperlukan untuk mengompilasi PHP dari sumber .
gcc. GCC (GNU C Compiler) adalah kompiler C open source, banyak digunakan oleh sebagian besar proyek C di luar sana. .
libc-dev. .
konfigurasi otomatis. .
banteng. .
re2c. .
membuat. .
Instal paket yang diperlukan. .
Buat skrip konfigurasi

Apakah kita perlu mengkompilasi kode PHP?

Jika server Anda mendukung PHP, maka Anda tidak perlu melakukan apapun. Buat saja milik Anda. php, letakkan di direktori web Anda dan server akan secara otomatis menguraikannya untuk Anda. Tidak perlu mengompilasi apa pun Anda juga tidak perlu menginstal alat tambahan apa pun.

Postingan terbaru

LIHAT SEMUA