Cara Membuat PHP System Updater, Fitur Update Untuk Aplikasi Berbasis PHP
Ok gaes sesuai janji saya tadi, saya akan kasih tutorial cara membuat fitur update untuk aplikasi berbasih PHP. Kalian semua pasti tahu kalau fitur update pada aplikasi mobile (android, ios, atau windows phone) merupakan fitur wajib yang harus ada. Terlebih lagi aplikasi mobile punya store yang mempermudah dalam manajemen versi dan updating.
Lantas bagaimana dengan aplikasi berbasi web terutama php? Sejatinya fitur update pada aplikasi php bukan lah hal yang baru. Karena rata-rata CMS web berbasis php sudah mengusung fitu update. Tapi bagaimana kalau ingin diterapkan di aplikasi buatan sendiri? Hal ini lah yang akan coba saya paparkan gaes. Yang perlu kalian ketahui terlebih dahulu ialah, Fitur update lebih baik memiliki 2 sisi, yaitu sisi client (aplikasi utama yang digunakan) dan sisi server yang fungsinya sebagai service agar ketersediaan update berserta informasinya dapat diketahui client. Tidak akan saya paparkan panjang lebar, karena seluruh source code ada di repositori github saya.
Server
Dari sisi server simpelnya kita hanya butuh satu file dengan output berupa informasi ketersediaan update yang bertipe data json. Sebenarnya tidak harus json, tapi saya lebih nyaman menggunakannya karena lebih fleksibel. kodingnya sebagai berkut:
- <?php
- /**
- * @Author: ramadhansutejo
- * @Date: 2016-09-29 11:16:09
- * @Last Modified by: ramadhansutejo
- * @Last Modified time: 2016-09-29 18:49:37
- */
- $releaseDir = 'http://your-server/dir/file';
- $appName = 'demo-app-';
- $appVersion = '1.1';
- $updateVar = array(
- 'update_status' => TRUE,
- 'php_recruitment' => '5.4.45',
- 'db_update' => FALSE,
- 'update_link' => $releaseDir.'/'.$appName.$appVersion.'.zip',
- 'update_version' => $appVersion,
- 'file_name' => $appName.$appVersion.'.zip',
- );
- echo json_encode($updateVar);
Client
Nah dari sisi client-nya kita perlu buat file untuk cek ketersediaan update atau lebih tepatnya cek informasi sesuai denganobject dari koding server diatas. Misal, pada variable “$updateVar” terdapat beberapa object salah satunya “update_status” yang berarti status update apakah tersedia (TRUE) atau tidak (FALSE). Intinya, pada sisi client kita harus membuat proses cek update, dan proses updating. Pada contoh yang sudah saya buat, terdapat 3 file yang menjadi inti dari fitur ini.
1. File update.php berfungsi untuk cek informasi update dari server.
1. File update.php berfungsi untuk cek informasi update dari server.
- <?php
- require_once 'app_info.php';
- // Lakukan CURL untuk get data dari server/API
- $curl_handle = curl_init();
- curl_setopt($curl_handle, CURLOPT_URL, 'http://your-server/service_to/update_information'); //ex: http://myapp.id/update
- curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
- $response = curl_exec($curl_handle);
- curl_close($curl_handle);
- // Tampung response kedalam variable result
- $result = json_decode($response);
- // Lakukan preg_replace untuk mengabaikan karakter selain angka, untuk yang berhubungan dengan penomoran versi agar perbandingan kedua versi pas
- $php_recruitment = preg_replace('/[^0-9.].*/', '', $result->php_recruitment);
- $php_version = preg_replace('/[^0-9.].*/', '', $appInfo['php_version']);
- $update_version = preg_replace('/[^0-9.].*/', '', $result->update_version);
- $curent_version = preg_replace('/[^0-9.].*/', '', $appInfo['curent_version']);
- // Lakukan pengecekan, dengan rekruitmen utama yaitu status update pada server tersedia/available (bernilai TRUE)
- if ($result->update_status == TRUE)
- {
- // Cek versi minimum php yang dibutuhkan dari versi updetan
- if ($php_recruitment > $php_version)
- {
- echo "Versi terbaru ditemukan, namun membutuhkan php versi ".$result->php_recruitment.". Upgrade versi php anda";
- }
- if ($update_version == $curent_version)
- {
- echo "Aplikasi/Sistem sudah dalam versi terbaru";
- }
- echo "Update sistem tersedia, versi sistem saat ini: ".$appInfo['curent_version'].". Update ke versi ".$result->update_version."<br><br>";
- echo '
- <form action="system_update.php" method="POST">
- <input name="file_name" type="hidden" value="'.$result->file_name.'">
- <button type="submit" name="update" value="'.$result->update_link.'">Update</button>
- <form>
- ';
- }
- else
- {
- echo "Update tidak tersedia";
- }
- ?>
2. File system_update.php berfungsi sebagai proses download & updating
- <?php
- require_once 'CfnPHPUpdater.php';
- if (isset($_POST['update']))
- {
- $message_update = array(
- 'downloading_message' => 'Mendownload versi terbaru',
- 'error_downloading_message' => 'Gagal mendownload versi terbaru',
- 'extracting_message' => 'Mengekstrak dan menginstall',
- 'error_extracting_message' => 'Terjadi kesalahan saat meng-ekstrak file',
- 'success_update_message' => 'Berhasil update ke versi terbaru',
- );
- $message_no_update = array(
- 'error' => 'Gagal melakukan update',
- );
- $do_update = new CfnPHPUpdater;
- $do_update->doUpdate($_POST['file_name'], $_POST['update'], 500000, $message_update, $message_no_update);
- }
- else
- {
- echo 'Forbidden!!';
- }
Silahkan sesuaikan isi ‘$message_update‘ dan ‘$message_no_update‘.
3. File CfnPHPUpdater.php merupakan class yang saya buat untuk proses downloading & updating yang meng-extends dari kelas bawaan PHP ZipArchive.
Berikut screenshot hasilnya.
Sebelum update :
GAMBAR 1 |
GAMBAR 2 |
GAMBAR 3 |
Proses update :
GAMBAR 1 |
Setelah update :
GAMBAR 1 |
GAMBAR 2 |
GAMBAR 3 |
Kesimpulan
- File update harus dikompresi menjadi zip
- Sebenarnya kamu hanya perlu meng-kompresi file-file yang mengalami perubahan. Perlu diingat, contoh yang saya buat untuk peng-ekstrakan file update dilakukan di root folder aplikasi (/)
- Fitur ini masih jauh dari kata sempurna, akan tetapi inti dari proses update pada aplikasi PHP kira-kira seperti ini
- Maaf jika penyampaian saya susah untuk dimengerti, karena pada dasarnya saya tidak terlalu mahir untuk menulis
- source code lengkap bisa di-download / clone di github saya https://goo.gl/ywWisc, very welcome jika ingin berkontribusi untuk mengembangkan fitur update ini
Terima kasih banyak gaes.