Posts filed under ‘PHP’

Memanggil web service dari server Java EE di client PHP

Seorang mahasiswa yang sedang membuat skripsi bertanya apakah mungkin membuat sebuah web service dengan Java Enterprise Edition kemudian memanggilnya di client PHP?  Pada kesempatan tatap muka yang singkat, saya menjawab secara ringkas dengan merujuk pada definisi web services. Web services adalah sistem yang dirancang secara khusus untuk mendukung interaksi pertukaran data mesin ke mesin melalui jaringan. Selama berkomunikasi melalui metode yang sama, maka proses komunikasi dapat terjadi tanpa membedakan OS maupun bahasa pemograman yang dipakai.   Saat ini ada dua jenis web services, yaitu yang berbasis REST dan berbasis SOAP. Web services berbasis REST cenderung lebih ringan dan lebih mudah dipelajari dibandingkan dengan SOAP. Hal ini menyebabkan terjadinya peralihan dari web services berbasis SOAP ke REST.

Pada kesempatan tertulis ini, saya akan memberikan sebuah contoh halaman PHP yang memanggil web services yang dibuat dengan Java Enterprise Edition. Metode yang dipergunakan adalah metode berbasis SOAP.

Saya akan membuat dua proyek, yaitu:

  1. Server web service yang menggunakan teknologi Java Enterprise Edition. Saya menggunakan NetBeans IDE dan GlassFish bawaannya.
  2. Sebuah halaman PHP yang mengakses layanan web service yang disediakan oleh server di atas.

Membuat Server Web Service dengan Java EE

Langkah-langkah yang saya lakukan adalah:

  1. Memilih menu File, New Project di NetBeans IDE. Kemudian saya memilih Java Web di Categories, dan Web Application di Projects. Setelah memberi nama proyek dan menentukan lokasi penyimpanan, saya men-klik tombol Finish.
  2. Men-klik kanan nama proyek, kemudian memilih menu New, Other... Pada dialog yang muncul, saya memilih Web Services di bagian Categories, dan Web Service di bagian File Typesseperti yang terlihat di gambar berikut ini:

    Membuat Web Services Baru

    Membuat Web Services Baru

  3.  Pada Web Service Name, saya mengisi dengan nama PerhitunganWS. Pada bagian package, saya mengisi dengan nama package co.id.jocki.ws. Setelah itu, saya men-klik tombol Finish.

NetBeans akan membuat sebuah class baru yang berada di folder Web Services seperti yang terlihat pada gambar berikut ini:

Web Services Di Tampilan Project

Web Services Di Tampilan Project

Bila class PerhitunganWS di-buka, NetBeans memungkinkan pengguna untuk melihat dalam bentuk Source atau Design. Bila tampilan Design dipakai, maka layar editor akan terlihat seperti pada gambar berikut ini:

NetBeans Web Service Editor

NetBeans Web Service Editor

Untuk menambahkan sebuah operasi baru, saya melakukan langkah-langkah seperti berikut ini:

  1. Klik tombol Add Operation… Akan muncul sebuah dialog baru.
  2. Untuk menambah parameter, saya dapat men-klik tombol Add. Saya mengisi dialog tersebut seperti yang terlihat pada gambar berikut ini:

    Menambah Operasi Baru Di Web Service

    Menambah Operasi Baru Di Web Service

  3. Setelah itu, saya men-klik tombol OK.

Setelah ini, saya perlu menambahkan kode program yang berisi proses untuk operasi baru tersebut.   Saya men-klik Source di toolbar untuk beralih ke tampilan kode program.   Kemudian, saya mengubah satu-satunya baris di method tambah() menjadi return angka1 + angka2; seperti yang terlihat di gambar berikut ini:

Kode Program Operasi Di Web Service

Kode Program Operasi Di Web Service

Untuk menguji web service tersebut, klik kanan pada nama class PerhitunganWS, kemudian memilih Test Web Service seperti yang terlihat di gambar berikut ini:

Menguji Web Services

Menguji Web Service

NetBeans akan menjalankan browser yang berisi web service tester. Di halaman ini terdapat sebuah link bertuliskan WSDL File. URL disini nantinya akan dipakai oleh client web service. Di percobaan saya, nilai URL ini adalah http://localhost:8080/ServerWebService/PerhitunganWS?WSDL. Saya akan men-copy lokasi URL ini untuk dipakai di PHP nantinya.

Pada bagian methods, saya mencoba mengisi parameter dengan nilai 10 dan 20, kemudian setelah men-klik tombol tambah (nama method), akan muncul halaman tambah Method invocation. Pastikan pada halaman tersebut, terdapat tulisan Method returned int: “30″.

Sekarang server web service telah selesai dibuat. Saya tidak mematikan GlassFish server di NetBeans karena pada langkah berikutnya, saya akan memanggil web service ini di PHP.

Membuat Client Web Service dengan PHP

Sebelum mulai membuat client web service di PHP, saya memastikan apakah extension SOAP telah diaktifkan di PHP saya. Yang saya lakukan adalah membuat sebuah file PHP dengan nama info.php dimana isinya adalah <?php phpinfo(); ?>. Saat menampilkan halaman tersebut di browser, saya memastikan bahwa terdapat baris Soap Client dengan nilai Enabled.

Untuk membuat client web service, saya perlu membuat sebuah object dari class SoapClient seperti pada baris berikut ini:

$client = new SoapClient("http://localhost:8080/ServerWebService/PerhitunganWS?WSDL");

Nilai dari parameter constructur SoapClient adalah URL yang merujuk ke lokasi file WSDL. URL ini dapat dilihat di halaman web service tester pada saat saya menguji server web service di NetBeans.

Secara utuh, kode program PHP yang saya buat adalah:

<?php
function errorHandler($errno, $errstr, $errfile, $errline, array $errcontext) {
print "<h3>Terjadi kesalahan/peringatan:</h3>";
print "Baris $errline [$errstr]";
exit;
}

set_error_handler('errorHandler');

$client = new SoapClient("http://localhost:8080/ServerWebService/PerhitunganWS?WSDL");
$daftarOperasi = $client->__getFunctions();
print "<h3>Daftar Operasi Yang Tersedia Di Server WS:</h3>";
foreach ($daftarOperasi as $operasi) {
print "<p>$operasi</p>";
}
$hasil = $client->tambah(array('angka1'=>20, 'angka2'=>10));
print "<h3>Hasil operasi hitung(10,20): " . $hasil->return . "</h3>";
?>

<!--?php 

Pada kode program tersebut, saya menyertakan pemeriksaan kesalahan dengan set_error_handler(). Bagian tersebut dapat digantikan dengan menggunakan try/catch. Akan tetapi bila menggunakan try/catch, hanya pesan kesalahan yang ditampilkan, sementara pesan warning tidak akan ditampilkan. Bila pengaturan penampilan pesan kesalahan & warning secara otomatis tidak dimatikan (nilai display_errors di file konfigurasi adalah stdout), maka bagian ini tidak diperlukan.

Karena server web service di GlassFish menyediakan file WSDL, maka saya dapat menggunakan method __getFunctions() untuk melihat operasi apa saja yang disediakan oleh server web service tersebut.

Untuk memanggil salah satu operasi yang ada, saya cukup memanggil method dengan nama yang bersesuaian, diikuti dengan parameter yang diletakkan dalam associative array. Sebagai contoh, di kode program di atas, saya memanggil operasi tambah dengan nilai parameter angka1 berupa 20 dan nilai angka2 berupa 10. Hasil yang dikembalikan dari server web service adalah angka 30.

26 Mei 2012 at 2:54 PM Tinggalkan Komentar

Memakai PHP Zend Studio 9

Zend Studio 9 adalah sebuah IDE untuk pengembangan aplikasi PHP.  Zend Studio 9 dibuat berdasarkan Eclipse Platform, sehingga bagi yang telah terbiasa menggunakan Eclipse, akan terasa sangat familiar sekali.  Pada artikel ini, saya akan menuliskan beberapa fitur yang saya temui di Zend Studio 9.

Kesan pertama: Zend Studio 9 sangat cocok bila dipadukan dengan Zend Server karena Zend Studio 9 mendukung Zend Application Deployment.  Pada kebanyakan IDE, misalnya Macromedia Dreamweaver, programmer menentukan lokasi penyimpan di web server (seperti htdocs) kemudian pada saat aplikasi akan dijalankan, IDE akan memanggil browser dengan URL tertentu.  Metode ini disebut sebagai “Launch URL” di Zend Studio 9.  Metode lainnya adalah “Launch with Zend Application Deployment“.  Pemilihan metode dapat dilakukan pada saat membuat proyek baru, seperti yang ditunjukkan di screenshot berikut:

Pilihan Launch Settings Saat Membuat Proyek Baru

Pilihan Launch Settings Saat Membuat Proyek Baru

Apa itu Zend Application Deployment?  Bila memilih opsi ini, maka Zend Studio 9 akan membuat sebuah file deployment.xml berisi informasi proyek.  Pada file ini, pengguna bisa menentukan ketergantungan proyek (dependency), mengatur script yang akan dikerjakan pada saat proses deployment (triggers), dan menentukan apa saja file yang akan di-upload ke server nantinya (package).

Perbedaan yang paling mencolok dengan metode konvensional adalah kita boleh menentukan lokasi proyek kita dimana saja.  Yup! Dimana saja, tidak harus di htdocs!!!  Lalu bagaimana web server bisa tahu lokasi file kita?  Zend Studio 9 akan menghasilkan sebuah file zpk yang isinya adalah proyek kita.  Lalu dengan metode Zend Application Deployment, Zend Studio 9 secara otomatis akan men-deploy file zpk tersebut.

Sayang sekali, Zend Server Community Edition (CE) yang gratis tidak mendukung deployment seperti ini.  Padahal deployment file zpk ini akan sangat berguna sekali bila kita sering memindahkan proyek dari satu server ke server lainnya.  Sebagai perbandingan, hampir semua Java Enterprise Edition (JEE) containers yang gratis telah mendukung file WAR dan/atau EAR yang fungsinya hampir sama seperti file ZPK.

Pada saat menulis kode program, Zend Studio 9 menawarkan fitur-fitur yang berguna, misalnya sebuah popup bantuan yang berisi dokumentasi seperti yang terlihat di gambar berikut:

Code Hint Di Zend Studio 9

Code Hint Di Zend Studio 9

Zend Studio 9 juga dapat menghasilkan tags  PHPDoc secara otomatis untuk sebuah function.  Sebagai contoh, bila saya memiliki function seperti ini:

function tambah($a, $b) {
}

Lalu, jika saya menuliskan /** tepat di atas deklarasi function tersebut dan menekan tombol Enter, maka Zend Studio 9 akan menambahkan PHPDoc seperti berikut ini secara otomatis:

/**
 *
 * @param unknown_type $a
 * @param unknown_type $b
 */
 function tambah($a, $b) {
 }

Fasilitas ini sangat mirip seperti yang ditawarkan Eclipse JDT untuk Javadoc.

Untuk pengembangan aplikasi PHP dengan Zend Framework, Zend Studio 9 menyediakan sebuah Zend Framework Perspective (dapat dipilih di menu Window, Open Perspective) untuk mempermudah pengembangan proyek.  Pada perspective ini, terdapat MVC Outline View yang mempermudah navigasi file di proyek karena proyek secara otomatis telah dikategorikan ke dalam controller, model dan view, seperti yang terlihat pada gambar berikut:

MVC Outline View

MVC Outline View

Sebagai penutup, saya ingin menunjukkan sebuah fasilitas yang menarik di Zend Studio 9 yaitu Profiler.  Yup, Zend Studio 9 telah menyertakan sebuah Profiler untuk mengukur kinerja setiap kode PHP di proyek kita.  Untuk menjalankan profiler, pilih menu Run, Profile.  Setelah proses selesai, kita dapat berpindah ke PHP Profile Perspective, dimana kita bisa memperoleh sebuah Time division pie chart seperti yang terlihat pada gambar:

Profiler Information

Profiler Information

Selain itu, kita juga bisa dapat memperoleh informasi statistik dalam bentuk tabel, seperti yang diperlihatkan di gambar berikut:

Execution Statistics

Execution Statistics

Masih ada fitur Zend Studio 9 yang belum saya tulis di artikel ini mengingat keterbatasan halaman, seperti fasilitas debugging dan dukungan PHPUnit.

06 Mei 2012 at 12:46 AM Tinggalkan Komentar

Memanggil DLL dari PHP

Pada suatu hari, seorang mahasiswa yang sedang menyusun skripsi menanyakan pada saya apakah mungkin mengakses DLL dari kode program PHP.  Sebuah pertanyaan yang tidak terduga, karena saya sama sekali tidak pernah dan tidak berpikiran untuk melakukan hal tersebut.  Hal ini karena PHP adalah bahasa pemograman yang berada di banyak platform, gratis, dan sangat populer di Linux.  Sementara teknologi DLL adalah teknologi yang sangat terikat pada Microsoft Windows serta Visual Studio-nya.  Menurut saya, pertanyaan ‘membaca DLL‘ akan lebih selaras bila dipadukan dengan teknologi ASP.NET dengan bahasa C# ataupun VB, dibandingkan dengan PHP.

Kembali ke pertanyaan semula, apakah mungkin memanggil DLL dari PHP? Setelah melakukan pencarian di PHP Manual, saya menemukan bagian COM and .Net (Windows) yang dapat diakses di www.php.net/manual/en/book.com.php.  PHP memang mendukung Component Object Model (COM) dan .NET.  Lalu apa hubungan COM dan DLL?

  • DLL (Dynamic-link Library) adalah implementasi shared-library di platform Windows.  Programmer membuat fungsi yang dapat dipanggil ulang di program berbeda.
  • COM (Component Object Model) adalah sebuah metodologi yang mengatur bagaimana menerapkan komponen program yang dapat dipakai ulang di program berbeda.
  • COM tidak mengatur struktur bahasa yang dipakai (menurut referensi MSDN, COM sering salah kaprah diangagp sebagai OOP).
  • Implementasi COM umumnya dalam bentuk file DLL.
  • Tidak semua DLL dibuat berdasarkan aturan COM, atau dengan kata lain tidak semua DLL adalah COM.

Jadi  jawaban untuk mahasiswa tersebut adalah: bila DLL dibuat dengan menggunakan teknologi COM, maka DLL tersebut dapat diakses di PHP.  Bila DLL tersebut adalah DLL sederhana, maka DLL tersebut tidak dapat diakses di PHP.

Lalu bagaimana bila ingin tetap mengakses DLL sederhana di PHP?  Ada sebuah extension PHP yang dikhususkan untuk Windows yang bernama WinBinder.  Dengan WinBinder, programmer PHP dapat memanggil semua APIs Windows dengan PHP, membuat program GUI berbasis PHP, bahkan memanggil DLL sederhana (tanpa COM) dengan PHP.

Pada artikel ini, saya akan menggunakan teknologi sebagai berikut:

  • Visual C++ di Visual Studio 2010 untuk menghasilkan DLL yang mengikuti spesifikasi COM.
  • Memakai ATL (Active Template Library) di Visual C++ untuk membuat COMATL bukan bagian dari COM ataupun bahasa C++ melainkan sebuah framework sebagai bagian dari Visual C++ untuk mempermudah pembuatan COM.
  • PHP untuk mengakses DLL yang dihasilkan oleh Visual C++

Untuk membuat COM di Visual C++ dengan bantuan ATL, pilih menu File, New, Project di Visual Studio 2010.  Kemudian pada Visual C++, pilih ATL Project.  Beri nama pada project tersebut, misalnya LatihanCOM.  Tentukan juga lokasi folder untuk penyimpanan project tersebut.  Kemudian klik tombol OK.

Membuat Project ATL Baru

Membuat Project ATL Baru

Akan muncul ATL Project Wizard yang terdiri atas dua langkah.  Klik tombol Next pada wizard tersebut.  Pastikan pada Application Type, pilihan Dynamic-link library (DLL) terpilih.  Kemudian klik tombol Finish untuk membuat project.

ATL Project Wizard

ATL Project Wizard

Setelah project selesai dibuat, buka panel Class View.  Bila panel ini tertutup, pilih menu View, Class View (Ctrl+Shift+C) untuk menampilkannya.  Klik kanan pada nama project, LatihanCOM, kemudian pilih Add, Class…  Pada window Add Class yang muncul, pilih ATL Simple Object.  Kemudian klik tombol Add untuk melanjutkan.

Tampilan Dialog Add Class

Tampilan Dialog Add Class

Pada tampilan ATL Simple Object Wizard yang muncul, ketik nama Perhitungan di Short name.  Nama lain akan di-isi secara otomatis.  Pastikan bahwa di bagian COM, nama Interface adalah IPerhitungan.  Kemudian isi ProgID dengan nama Jocki.Perhitungan.  Window tersebut harus terlihat seperti berikut ini:

ATL Simple Object Wizard

ATL Simple Object Wizard

Klik tombol Finish untuk menyelesaikan wizard.

Buka panel Class View dan cari COM Interface yang bernama IPerhitungan.  Interface ini dibuat secara otomatis oleh Visual C++ sehingga yang perlu kita lakukan hanya menambahkan method yang akan dipanggil oleh program lain.  Klik kanan pada IPerhitungan, kemudian pilih Add, Add Method…

Menambah Method Pada COM Interface

Menambah Method Pada COM Interface

Pada dialog Add Method Wizard yang muncul, kita akan membuat sebuah method sederhana.  Method ini akan menerima parameter berupa dua buah bilangan bulat, kemudian mengembalikan hasil jumlah dua bilangan tersebut.  Pada method name, beri nama HitungJumlah.  Kemudian tambahkan dua parameter input dengan mengikuti langkah ini:

  1. Beri centang pada checkbox in di Parameter attributes.
  2. Ketik int di Parameter type.
  3. Ketik nilai1 di Parameter name.
  4. Klik tombol Add.
  5. Beri centang pada checkbox in di Parameter attributes.
  6. Ketik int di Parameter type.
  7. Ketik nilai2 di Parameter name.
  8. Klik tombol Add.

Setelah menambahkan parameter, tambahkan nilai kembalian dengan mengikuti langkah ini:

  1. Ketik int* di Parameter type.  Jangan lupa menambahkan * setelah int karena variabel ini akan merujuk ke hasil kembalian (pointer).  Bila tidak ada * setelah int, wizard tidak akan memberikan pilihan untuk mencentang checkbox out dan retval di langkah berikutnya.
  2. Beri tanda centang checkbox out dan checkbox retval.
  3. Ketik hasil pada Parameter name.
  4. Klik tombol Add.

Tampilan wizard akan terlihat seperti berikut ini:

Tampilan Add Method Wizard

Tampilan Add Method Wizard

Klik tombol Finish untuk menyelesaikan wizard.

Cari baris kode program seperti berikut ini di file Perhitungan.cpp:

STDMETHODIMP CPerhitungan::HitungJumlah(int nilai1, int nilai2, int* hasil)
{
// TODO: Add your implementation code here

return S_OK;
}

Kode program ini merupakan implementasi dari method yang akan dipanggil oleh PHP nantinya.  Ganti baris yang diawali dengan //TODO sehingga kode programnya akan terlihat seperti berikut ini:

STDMETHODIMP CPerhitungan::HitungJumlah(int nilai1, int nilai2, int* hasil)
{ *hasil = nilai1 + nilai2;

return S_OK;
}

Langkah terakhir sebelum menghasilkan DLL adalah melakukan sedikit perubahan pada settingan project.  Buka panel Solution Explorer.  Bila panel ini tertutup, pilih menu View, Solution Explorer (Ctrl+Alt+L).  Klik kanan pada nama project, LatihanCOM, kemudian pilih Properties.  Pada baris Per-user Redirection, ganti nilai No menjadi Yes.  Hal ini dilakukan untuk menghindari hal-hal yang berkaitan dengan masalah hak akses user.  Dengan mengaktifkan Per-user Redirection, DLL yang dihasilkan hanya akan tersedia oleh user Windows yang sedang aktif saat ini saja.

Untuk membuat DLL, pilih menu Build, Build Solution (Ctrl+Shift+B).  File DLL yang dihasilkan terletak di folder Debug di lokasi penyimpanan project.  Sebagai contoh, jika saya menyimpan project di Desktop, maka file DLL yang dihasilkan adalah C:\Users\JockiHendry\Desktop\LatihanCOM\Debug\LatihanCOM.dll.  Visual C++ 2010 telah melakukan registrasi DLL secara otomatis sehingga kita tidak perlu repot-repot lagi.

Sekarang, kita akan melakukan pengujian apakah DLL tersebut dapat dipanggil dengan baik.  Buat sebuah file PHP dengan isi seperti berikut ini:

<?php
   $perhitungan = new COM("Jocki.Perhitungan");
   $hasil = $perhitungan->HitungJumlah(11,22);
   print "Hasil dari method di COM DLL adalah $hasil";
?>

Bila kode program PHP di atas dijalankan, hasilnya adalah:

Hasil dari method di COM DLL adalah 33

Apa langkah berikutnya?

  • Ingin memanggil COM yang berada di komputer lain?  Pelajari Distributed COM (DCOM) lebih lanjut.
  • Tidak ingin memakai teknologi COM melainkan ingin memakai simple DLL?  Lihat solusi yang ditawarkan oleh Winbinder.
  • Walaupun Microsoft tidak menghentikan dukungan atas COM, teknologi tersebut sudah kadaluarsa dan kini digantikan oleh penerusnya.  Ingin beralih ke .NET?  Pelajari lebih lanjut tentang .NET Component.

14 Januari 2012 at 1:08 AM 4 komentar

URL Rewriting Di Apache HTTP Server

Seorang programmer PHP membuat file latihan.php di folder web-nya.  Untuk mengakses file tersebut, pengguna harus mengetikkan URL seperti http://www.domain.com/latihan.php. Dengan demikian, URL selalu berisi informasi yang dipetakan terhadap file fisik.  Hal ini tidak berlaku di JEE: user mengakses sebuah Servlet bukan berdasarkan nama class, tetapi berdasarkan nilai element urlPatterns di WebServlet annotation.

Seandainya programmer PHP tersebut membuat file post.php yang diakses seperti ini:

http://www.domain.com/post.php?tahun=2012&bulan=11&tanggal=01

Kemudian ia merasa bahwa URL tersebut terlalu panjang, alangkah sederhananya bila URL tersebut diakses seperti:

http://www.domain.com/2012/10/01

Apa yang harus ia lakukan tanpa membuat file baru?  Proses yang harus ia lakukan dikenal sebagai URL rewriting.  Bila ia memakai Apache HTTP Server, ia dapat menggunakan Apache mod_rewrite yang menyediakan fungsi tersebut.

Sebelum menggunakan Apache mod_rewrite, pastikan terlebih dahulu modul tersebut sudah di-load, dengan memeriksa isi file konfigurasi Apache.  Sebagai informasi, nama file konfigurasi Apache HTTP Server adalah httpd.conf (pada server Linux, biasanya terdapat di direktori /etc).  Pastikan baris berikut tidak di-comment (tidak diawali tanda #):

LoadModule rewrite_module modules/mod_rewrite.so

Bila si programmer tidak memiliki akses pada folder sensitif, ia dapat membuat sebuah file PHP dengan isi seperti berikut:

<?php
phpinfo();
?>

Setelah menjalankan PHP tersebut di-browser, sang programmer dapat memeriksa bagian apache2handler di baris Loaded Modules.  Bila terdapat tulisan mod_rewrite, maka ia dapat menggunakan fitur URL Rewriting dari Apache HTTP Server.

Langkah berikutnya yang harus dilakukan adalah menambahkan directive untuk keperluan mod_rewrite.  Hampir semua directive dapat diletakkan di file konfigurasi httpd.conf, akan tetapi bila si programmer tidak memiliki akses untuk mengubah httpd.conf, ia terpaksa harus meletakkannya pada file .htaccess. Ada beberapa directive yang tidak dapat diletakkan di .htaccess, misalnya RewriteLog dan RewriteLogLevel yang memungkinkan log yang berisi informasi mengenasi proses URL rewriting yang terjadi.

Selain itu, pastikan AllowOverride bernilai All pada directive Directory yang berisi lokasi direktori fisik.  Bila AllowOverride bernilai None, maka file .htaccess akan diabaikan oleh Apache HTTP Server.

Langkah terakhir, si programmer membuat file .htaccess di direktori utama, yang isinya seperti berikut ini:

RewriteEngine On
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})$ /post.php?tahun=$1&bulan=$2&tanggal=$3

Directive RewriteRule di atas mengandung dua bagian, yaitu bagian Pattern dan bagian Substitution.

Bagian Pattern berisi regular expression yang akan dicocokkan dengan URL yang diberikan oleh pengguna.  Pada regex, [0-9]{4}/ menunjukkan bahwa wajib terdapat empat digit angka (contoh pola yang memenuhi: 1994/, 2004/; contoh pola yang salah: abcd/, 19/).  Lalu [0-9]{2}/ menunjukkan bahwa wajib terdapat dua digit angka (contoh pola yang memenuhi: 10/, 11/, dan sebagainya).  Dengan demikian, secara keseluruhan, contoh nilai yang memenuhi regex di bagian Pattern ini adalah: 2011/11/01

Bagian Substitution berisi resources yang sesungguhnya akan diakses. Resources dapat berupa lokasi file ataupun URL lain.  Pada contoh, bila pola URL di pattern dipenuhi, maka yang akan diakses adalah /post.php.  Nilai $1 akan digantikan dengan nilai ekspresi dalam tanda kurung yang pertama kali dijumpai di bagian Pattern.  Begitu juga nilai $2 akan digantikan dengan nilai ekspresi dalam tanda kurung yang kedua, dan seterusnya.

Dengan demikian, bila user yang memasukkan URL:

http://www.domain.com/2011/11/30

maka halaman yang sesungguhnya diakses adalah:

http://www.domain.com/post.php?tahun=2011&bulan=11&tanggal=30

19 November 2011 at 3:48 PM 2 komentar

Membuat PDF di PHP

Dalam membuat aplikasi berbasis web, kadang-kadang kita perlu menghasilkan dan menampilkan file PDF, misalnya untuk membuat halaman yang berisi laporan.   Bila di Java terdapat framework iText, maka di PHP kita dapat menggunakan PDFlib, yang dapat di-download di http://www.pdflib.com/.  Berhubung metode extensi PHP yang berbeda tergantung pada platform, tulisan ini mengandaikan PHP di-install di platform Windows.

Langkah pertama yang harus dilakukan adalah mengetahui versi PHP.  Hal ini dapat dilakukan dengan membuka command prompt dan mengetik seperti:

C:\Programs\PHP\bin>php -v
PHP 5.3.5 (cli) (...)
...

Setelah mengetahui versi PHP, buka file konfigurasi PHP.  File ini terletak di lokasi direktori dimana PHP di-install dan memiliki nama php.ini.   Gunakan fitur search di text editor untuk mencari kata extension_dir.  Ini adalah lokasi dimana kita harus meletakkan file binary PDFlib nantinya.   Defaultnya adalah sebuah folder bernama ext.  Bila ingin menyertakan direktori baru, lokasi lengkap direktori tersebut harus ditambahkan disini.

Lalu, pada extract ZIP PDFlib yang telah di-download pada lokasi sementara, kemudian buka folder bind, lalu folder php.  Setelah itu, akan terdapat beberapa folder seperti php-510, php-520 dan php-530.  Ada beberapa versi dari folder tersebut, misalnya php-520-nozts adalah versi PDFlib yang di-compile tanpa dukungan multithreading.  Zts disini merujuk pada Zend Thread Safety.  Pada PDFLib untuk PHP 5.3, terdapat folder seperti php-530-nozts_VS9.  VS9 disini merujuk pada versi compiler Visual Studio yang dipakai.  Folder yang dipakai harus disesuaikan dengan versi PHP, dan untuk PHP 5.3, juga harus sesuai dengan compiler yang dipakai untuk men-build PHP tersebut (pada waktu men-download PHP, terdapat beberapa versi compiler yang dapat dipilih).

Copy file libpdf_php.dll di folder yang telah dipilih ke lokasi extension directory sesuai dengan yang tertera di php.ini.  Setelah itu, tambahkan baris berikut ini di file php.ini:

extension=libpdf_php.dll

Bila web server tidak dapat dijalankan seperti biasa, pastikan file DLL dipilih dari directory yang tepat, sesuai dengan versi PHP, dukungan threading dari PHP, dan versi compiler yang dipakai untuk men-compile PHP.

Sekarang buat  dan jalankan program PHP seperti ini:

<?php
try {
  $p = new PDFLib();
  if ($p->begin_document("","")==0) {
    die("Error: " . $p->get_errmsg());
  }
  $p->begin_page_ext(595, 842, "");
  $font = $p->load_font("Helvetica-Bold", "winansi", "");
  if ($font==0) {
    die("Error: " . $p->get_errmsg());
  }
  $p->setfont($font, 24.0);
  $p->set_text_pos(50, 700);
  $p->show("Hello World!");
  $p->continue_text("(says PHP)");
  $p->end_page_ext("");
  $p->end_document("");
  $buf = $p->get_buffer();
  $len = strlen($buf);

  header("Content-type: application/pdf");
  header("Content-Length: $len");
  header("Content-Disposition: inline; filename=hello.pdf");
  print $buf;
} catch (PDFlibException $e) {
  die("Terjadi Kesalahan:\n[" . $e->get_errnum() . "] [" . $e->get_errmsg() . "]\n");
} catch (Exception $e) {
  die($e);
}
$p = 0;
?>

Browser yang sudah dilengkapi plugin Adobe Acrobat Reader akan langsung menampilkan output PDF dari halaman PHP di atas, dan browser yang belum mendukung Adobe Acrobat Reader akan meminta pengguna untuk mendownload file PDF bernama hello.pdf.  Perlu diperhatikan bahwa PDFlib tidak gratis untuk penggunaan komersial.  Bila ingin menghilangkan tulisan “www.pdflib.com” di setiap output PDF, seseorang harus meminta evaluation key dengan menghubungi sales@pdflib.com.

27 Juli 2011 at 1:57 PM Tinggalkan Komentar


Arsip


Ikuti

Get every new post delivered to your Inbox.