PHPMaker memiliki sebuah global function yang bernama ew_CurrentUserIP() untuk mendapatkan IP Address dari komputer Pengguna ketika mengakses Aplikasi Web yang dibangkitkan oleh PHPMaker. Kita sebagai Web Developer dapat menggunakan fungsi global ini misalnya untuk mendeteksi apakah Aplikasi Web itu diakses dari komputer yang sama dengan web server berada (localhost), atau diakses dari komputer yang berbeda dengan web server berada (remote).
Tapi, tahukah Anda, bahwa jika fungsi global tersebut diakses dari browser yang berbeda, maka hasilnya pun akan berbeda pula? Mungkin di antara Anda masih ada yang belum menyadari bahwa global function ew_CurrentUserIP() jika diakses dari bebeberapa browser berikut: Mozilla Firefox, Internet Explorer, Opera, Google Chrome, dan Torch, maka hasilnya akan mengembalikan nilai IP Address yang tidak sama. Nah, lho! Kok bisa?
Diawali dari rasa penasaran adanya Aplikasi Web yang dihasilkan oleh PHPMaker ketika saya jalankan di localhost hasilnya seolah tidak dapat mengenali file css. Tampilan Aplikasi Web menjadi berantakan, sama seperti jika tidak menggunakan style dari file css. Hal ini terbukti ketika saya melihat View Source dari halaman yang pertama kali tampil. Setting dinamis css yang diambil dari Database sama sekali tidak terbaca.
Tapi yang anehnya adalah, kejadian itu hanya terjadi di beberapa browser saja. Tidak semua browser. Selain itu, jika Aplikasi Web ini diakses dari remote server (bukan di localhost), maka sama sekali tidak ada masalah. Semua browser bisa menampilkan Aplikasi Web tersebut dengan normal. Aplikasi Web dapat membaca setting Database dengan baik jika diakses dari komputer remote. Akhirnya, saya mengambil sebuah kesimpulan, bahwa ada masalah saat membaca setting Database saat Aplikasi Web dijalankan di localhost, dan hanya untuk beberapa browser saja.
Setelah ditelusuri lebih lanjut, ternyata hal ini disebabkan karena adanya kode PHP yang saya tambahkan di server event Database_Connecting yang melibatkan fungsi global ew_CurrentUserIP() tadi. Artinya, jika kode PHP tersebut saya hapus, maka style dan tema Aplikasi Web kelihatan normal sebagaimana mestinya. Aplikasi Web dapat membaca setting css dari Database menggunakan setting Database di file konfigurasi yang dibangkitkan oleh PHPMaker. Ahaa! Mulai semakin terlokalisir penyebab masalah ini.
Ternyata ada satu baris kode PHP yang sering digunakan di server event Database_Connecting yang menyebabkan Aplikasi Web tidak dapat membaca setting Database dengan normal, yaitu:
if (ew_CurrentUserIP() == "127.0.0.1") { // testing on local PC
Jika kita telusuri lebih dalam lagi, ternyata isi dari fungsi global ini adalah menjalankan kode PHP berikut:
$_SERVER["REMOTE_ADDR"]
Hanya browser Mozilla Firefox dan Internet Explorer yang dapat membaca kode di atas dengan benar. Sedangkan untuk tiga browser terakhir, yaitu: Opera, Google Chrome, dan Torch selalu tidak akan pernah mengenali kondisi tadi. Dengan kata lain, ketiga browser tersebut mengembalikan nilai ::1.
Lalu bagaimana solusinya? Kode PHP di atas seharusnya diubah menjadi seperti ini:
if (ew_CurrentUserIP() == "127.0.0.1" || ew_CurrentUserIP() == "::1" || ew_CurrentHost() == "localhost") { // testing on local PC
Itu adalah kode PHP yang paling aman jika Anda ingin menyertakan setting Database untuk localhost pada server event Database_Connecting. Untungnya, PHPMaker juga mempunyai fungsi global lain yang bernama ew_CurrentHost() yang akan mengembalikan nilai localhost pada komputer yang sama dengan web server berada. Semakin lebih aman lagilah jika kita menggunakan fungsi global yang terakhir ini.
Dari beberapa referensi di Internet yang saya temukan hari ini, ternyata nilai ::1 adalah nilai IP Address yang merupakan ipv6 loopback address. Nilai tersebut sama dengan nilai IP Address 127.0.0.1 pada ipv4. Artinya, kedua nilai IP Address tersebut sama-sama mengacu pada localhost.
Satu lagi ilmu baru yang layak untuk sama-sama kita ketahui. Jangan berterima kasih ke saya. Berterima kasihlah kepada Google dan PHPMaker. Dan yang lebih utama lagi, beterima kasihlah kepada Tuhan Yang Maha Pengasih, yang sudah memberikan kesempatan kepada kita untuk mengetahui perbedaan tersebut.
sidik mengatakan
Pak Masino saya pemula dan ingin bertanya, saya ingin upload hasil phpmaker kesaya ke hosting (internet), saat saya run semunya normal namun ada kendala saat saya ingin export ke pdf, pdf tidak mau muncul,
Jika saya liat di console crome
jquery-1.12.0.min.js:3 GET http://**/com/calon_pelanggansmry.php?export=pdf&custom=1&exportid=f9gb8pqn9jlmf3ogh4topips77_1463027232721 500 (Internal Server Error)
Saya menggunakan PHPMaker dan PHP Report Maker.
Di PHPMaker saya harus setting apa?
Di PHP Report Maker saya harus setting apa?
Trims.
Masino Sinaga mengatakan
Pastikan setting koneksi ke database di server hosting sudah dibuat dan benar. Gunakan server event Database_Connecting untuk membuat koneksi Database yang dinamis.
Baca dan pelajari topik Server Events and Client Scripts dari menu Help PHPMaker.
sidik mengatakan
Dear Pak Masino terima kasih untuk informasinya, saat ini sudah bisa.
Masino Sinaga mengatakan
Sama-sama.
Eka dalas pangestu mengatakan
Pak masino saya mau bertanya bagaimana agar phpmaker yang kita buat hanya dapat diakses menggunakan browser chrome saja ?
Masino Sinaga mengatakan
Google php restrict browser types