Menjalankan PHP pada Java Virtual Machine (JVM)

2 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Menjalankan PHP pada Java Virtual Machine
Menjalankan PHP pada JVM (Logo hak cipta masing-masing)

TeknoCerdas.com – Salam cerdas untuk kita semua. JVM atau Java Virtual Machine adalah runtime untuk menjalankan Java bytecode. JVM sudah terbukti kestabilan dan kehandalannya terlebih dikalangan enterprise. Lalu bagaimana jika menjalankan PHP pada JVM, apakah bisa? Jawabannya tentu bisa.

Selain PHP sudah banyak bahasa yang didukung oleh JVM dan itu sudah cukup matang sebut saja Ruby dengan JRuby, Python dengan Jython. PHP sendiri belum memiliki satu project matang untuk implementasi PHP diatas JVM.

Baca Juga
Menjalankan PHP pada .NET Core

Pada tulisan ini saya akan mencoba implementasi PHP pada JVM dari project JPHP. Yang membedakan implementasi JPHP dengan yang lain adalah PHP masih tidak bisa mengakses pustaka standar bawaan Java. JPHP menyediakan sendiri pustaka Java dan paket manajemen untuk digunakan khusus dengan PHP.

Instalasi JPHP pada Linux

Tulisan ini mengasumsikan bahwa anda sudah memiliki instalasi Java pada sistem anda. Tulisan ini menggunakan JPHP versi 0.6.7 versi Linux. Download JPHP untuk lihat pada tautan berikut:

https://github.com/jphp-group/jphp/releases

$ curl -O -L 'https://github.com/jphp-group/jphp/releases/download/jppm-0.6.7/jppm-0.6.7.tar.gz'

Setelah file didownload maka ekstrak file kompresi tersebut ke direktori tertentu. Dalam contoh digunakan /opt.

$ sudo mkdir /opt/jphp
$ sudo tar xvf jppm-0.6.7.tar.gz -C /opt/jphp

Pastikan direktori /opt/jphp ada dalam PATH environment variabel.

$ chmod +x /opt/jphp/jppm
$ export PATH=/opt/jphp:$PATH

Sekarang coba jalankan perintah jppm apakah dikenali pada shell. Jika ya maka instalasi telah selesai.

$ jppm 
-> linux

Menjalankan PHP dengan JPHP

Selain sebuah compiler dari PHP ke Java bytecode JPHP juga merupakan package manager. Kita akan menggunakan perintah init untuk membuat skeleton project JPHP.

$ mkdir $HOME/jphp-test
$ cd $HOME/jphp-test

Lalu jalankan init untuk membuat skeleton.

$ jppm init
-> linux
-> init
JPHP Packager 0.6.7
Init new package in dir '/root/jphp-test':
Enter name (jphp-test): (default = jphp-test)
Enter version (1.0.0): (default = 1.0.0)
Enter description: TeknoCerdas JPHP Test
Add 'jphp app' plugin? (default = Yes) (Y/n) (default = yes)
(info) Create dir '/root/jphp-test/src'
(info) Create new file '/root/jphp-test/src/index.php'
Success, package.php.yml has been created.
✨ Done.

Modifikasi file src/index.php sesuai keinginan. Berikut adalah modifikasi yang dilakukan.

echo "TeknoCerdas.com - Berita teknologi yang mencerdaskan"

Jalankan dengan perintah start. Awalnya akan muncul pesan instalasi paket-paket yang diperlukan.

$ jppm start
-> linux
-> app:run
-> install
-> install jphp-core@1.3.1
--> install jphp-runtime@1.3.1
-> install jphp-zend-ext@1.1.0
--> install jphp-json-ext@1.0.0
TeknoCerdas.com - Berita teknologi yang mencerdaskan

Jika ingin melakukan build untuk menghasilkan JAVA .jar maka gunakan perintah build.

$ jppm build
> linux
-> app:clean
-> install
-> app:build
(info) Create dir './build'
(info) Create new file './build/jphp-test-1.0.0.jar'
(info) Create dir './build/.app'
-> add jar: ./vendor//jphp-core/jars/jphp-core-0.9.3-SNAPSHOT.jar
(info) Create dir './build/libs'
-> add jar: ./vendor//jphp-core/jars/asm-util-7.3.1.jar
-> add jar: ./vendor//jphp-core/jars/asm-7.3.1.jar
-> add jar: ./vendor//jphp-core/jars/asm-analysis-7.3.1.jar
-> add jar: ./vendor//jphp-core/jars/asm-tree-7.3.1.jar
-> add jar: ./vendor//jphp-core/jars/asm-commons-7.3.1.jar
-> add jar: ./vendor//jphp-runtime/jars/jphp-runtime-1.0.3.jar
-> add jar: ./vendor//jphp-zend-ext/jars/jphp-zend-ext-0.9.3-SNAPSHOT.jar
-> add jar: ./vendor//jphp-json-ext/jars/gson-2.7.jar
-> add jar: ./vendor//jphp-json-ext/jars/jphp-json-ext-0.9.3-SNAPSHOT.jar
-> add dir: /root/jphp-test/src
--> add file: /root/jphp-test/src/index.php
-> create jphp app launcher
(info) Create dir './build/.app/JPHP-INF/'
(info) Create dir './build/.app/META-INF/'
(info) Create new file './build/.app/META-INF/MANIFEST.MF'
(info) Delete file './build/.app'
(info) Create new file './build/jphp-test-1.0.0'
(info) Create new file './build/jphp-test-1.0.0.bat'

   Use '././build/jphp-test-1.0.0' to run the result app.

-----
Building time: 0.38 sec.
Building is SUCCESSFUL. :)
-> build

Hasil build akan berada pada direktori build/.

$ ls -l build/
ls -l build/*
-rw-r--r-- 1 root root 5281 Mar 30 09:55 build/jphp-test-1.0.0
-rw-r--r-- 1 root root 2647 Mar 30 09:55 build/jphp-test-1.0.0.bat
-rw-r--r-- 1 root root  609 Mar 30 09:55 build/jphp-test-1.0.0.jar

build/libs:
total 2600
-rw-r--r-- 1 root root  121836 Mar 30 09:55 asm-7.3.1.jar
-rw-r--r-- 1 root root   33446 Mar 30 09:55 asm-analysis-7.3.1.jar
-rw-r--r-- 1 root root   71548 Mar 30 09:55 asm-commons-7.3.1.jar
-rw-r--r-- 1 root root   52826 Mar 30 09:55 asm-tree-7.3.1.jar
-rw-r--r-- 1 root root   84817 Mar 30 09:55 asm-util-7.3.1.jar
-rw-r--r-- 1 root root  231952 Mar 30 09:55 gson-2.7.jar
-rw-r--r-- 1 root root  505239 Mar 30 09:55 jphp-core-0.9.3-SNAPSHOT.jar
-rw-r--r-- 1 root root   17336 Mar 30 09:55 jphp-json-ext-0.9.3-SNAPSHOT.jar
-rw-r--r-- 1 root root 1257309 Mar 30 09:55 jphp-runtime-1.0.3.jar
-rw-r--r-- 1 root root  268166 Mar 30 09:55 jphp-zend-ext-0.9.3-SNAPSHOT.jar

Untuk menjalankan maka perintah yang harus dipanggil adalah build/jphp-test-1.0.0.

$ sh build/jphp-test-1.0.0
TeknoCerdas.com - Berita teknologi yang mencerdaskan