Pelatihan Build RESTful Services with PHP

Pada tanggal 1-3 Agustus 2018 telah dilaksanakan Pelatihan dengan Judul Build RESTful Services with PHP and CI. Peserta dari pelatihan ini adalah developer dari Politeknik Caltex Riau, Pekanbaru.

Pelatihan ini bertujuan untuk memberikan pengetahuan praktis tentang pengembangan RESTful web services dengan teknologi PHP dengan menggunakan framework Codeigniter yang merupakan framework yang sangat populer karena kelengkapan fitur, performa dan kemudahaan penggunaannya. Codeigniter juga sangat cocok untuk digunakan membangun aplikasi dengan arsitektur service oriented berbasis RESTful.

Pada pelatihan ini juga dibahas bagaimana cara untuk menggunakan basic, dan digest authentication dengan Web API, kemudian dilanjutkan dengan penggunaan token based authentication dengan JWT Token.

7

Pelatihan Building RESTful Web Services with PHP (PERURI)

Pada tanggal 6-8 Desember 2017 telah dilangsungkan pelatihan dengan judul Building RESTful Web Services with PHP. Pelatihan ini diikuti oleh pengembang aplikasi backend dari PERURI. Ini adalah pelatihan batch kedua dengan topik yang sama.

Pelatihan ini bertujuan untuk memberikan pengetahuan praktis tentang pengembangan RESTful web services dengan teknologi PHP dengan menggunakan framework Codeigniter yang merupakan framework yang sangat populer karena kelengkapan fitur, performa dan kemudahaan penggunaannya. Codeigniter juga sangat cocok untuk digunakan membangun aplikasi dengan arsitektur service oriented berbasis RESTful.

Pada pelatihan ini juga dibahas bagaimana cara untuk menggunakan basic, dan digest authentication dengan Web API, kemudian dilanjutkan dengan penggunaan token based authentication dengan JWT Token.

35

Pelatihan Building RESTful Web Services with PHP (PERURI)

Pada tanggal 22-24 November 2017 telah dilangsungkan pelatihan dengan judul Building RESTful Web Services with PHP. Pelatihan ini diikuti oleh pengembang aplikasi backend dari PERURI.

Pelatihan ini bertujuan untuk memberikan pengetahuan praktis tentang pengembangan RESTful web services dengan teknologi PHP dengan menggunakan framework Codeigniter yang merupakan framework yang sangat populer karena kelengkapan fitur, performa dan kemudahaan penggunaannya. Codeigniter juga sangat cocok untuk digunakan membangun aplikasi dengan arsitektur service oriented berbasis RESTful.

Pada pelatihan ini juga dibahas bagaimana cara untuk menggunakan basic, dan digest authentication dengan Web API, kemudian dilanjutkan dengan penggunaan token based authentication dengan JWT Token.

3 4

Training PHP Web Security & Laravel

Training PHP Web Security & Laravel Framework ini diselenggarakan pada tanggal 22-25 Agustus 2017. Peserta adalah web developer dari BPRS Bhakti Sumekar, Sumenep, Madura.

Tujuan dari pelatihan ini adalah membahas berbagai macam serangan dan ancaman keamanan pada aplikasi berbasis web. Serangan/ancaman yang akan dibahas pencegahannya adalah ancaman/serangan yang kerap muncul (10 besar jenis serangan) berdasarkan OWASP (Open Web Application Security Project).

Dengan mengetahui jenis serangan dan pencegahan dari ancaman yang sering terjadi pada aplikasi web, maka pengembang aplikasi web dapat mempunyai dasar dan pengetahuan yang cukup untuk menyiapkan strategi pencegahan untuk berbagai jenis serangan yang umum dilakukan.

Pada bahasa pemrograman PHP penggunaan framework dapat meminimalkan masalah security, karena biasanya framework tersebut sudah didesain secara aman untuk menangani berbagai serangan yang umum dilakukan pada aplikasi Web. Salah satu PHP framework yang paling populer dan banyak digunakan saat ini adalah Laravel.

Laravel adalah sebuah framework yang dinamis dan modern untuk pengembangan aplikasi web. Laravel menggunakan konsep Model-View-Controller (MVC). Framework Laravel banyak digunakan karena sifatnya yang Open-Source, reliable, dan secure. Laravel juga mendukung fitur-fitur yang modern seperti Database Provider, Security Module, dan ORM Eloquent untuk bekerja dengan database secara mudah.

Adapun materi yang dibahas pada pelatihan ini adalah:

  • Introduction to Web Security
  • PHP Web Application Security
  • Input Validation
  • Cross Site Scripting (XSS)
  • SQL Injection
  • State Management
  • Cross Site Request Forgery (CSRF)
  • Storing Password
  • Error Handling
  • Penjelasan tentang Framework Laravel
  • Instalasi Laravel Homestead dan Visual Studio Code (beserta plugin PHP, dan Laravel)
  • Mekanisme Routing pada Laravel
  • Laravel Controller & RESTFull Controller
  • Passing data dari Controller ke View
  • Penggunaan Laravel Helper
  • View dengan Blade dan Form
  • Menangani Validasi Form
  • Akses ke MySQL Database
  • Laravel Migration & Seeding
  • Laravel Model & Eloquent ORM
  • Relasi antar Table dengan Eloquent ORM
  • Laravel Authentication (Registrasi, Login, Authorisasi)
  • Studi Kasus

training1all2

PDO (PHP Data Objects)

PDO Introduction

PDO (PHP Data Objects) adalah salah satu ekstensi yang disupport oleh PHP5 untuk mendefinisikan lightweight DBMS connection abstraction library atau dapat juga disebut database abstraction library. PDO digunakan untuk melakukan koneksi dengan berbagai macam database yang di support oleh PHP.

Jika anda pernah menggunakan PHP dan database MySQL anda pasti pernah menggunakan perintah-perintah sebagai berikut:

mysql_connect($host, $user, $password);
mysql_select_db($db);

Atau ketika anda menggunakan PHP dan database SQL Lite maka anda menggunakan perintah:

$dbh = sqlite_open($db, 0666);

Dengan menggunakan perintah-perintah tersebut diatas maka aplikasi yang anda buat akan terikat dengan database yang anda gunakan secara spesifik. Ketika anda akan melakukan migrasi database maka anda harus merubah seluruh script anda, dan hal ini akan sangat menyulitkan anda.

PDO menawarkan cara yang berbeda untuk bekerja dengan database secara lebih umum, dengan PDO perintah yang anda tuliskan untuk koneksi dengan database MySQL, SQLite, dan Postgree adalah sebagai berikut:

// For MySQL:
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
// For SQLite:
$conn = new PDO("sqlite:$db");
// And for PostgreSQL:
$conn = new PDO("pgsql:host=$host dbname=$db", $user, $pass);

Dengan PDO anda akan tidak perlu mengganti kode yang sudah anda buat sebelumnya ketika akan melakukan migrasi program.

Pada tutorial dibawah ini penulis akan menunjukan bagaimana cara bekerja dengan database menggunakan PDO.

Database Sample

Buat sample database yang akan digunakan pada aplikasi contoh, pertama buat database dengan nama pdo kemudian buat dua table dengan nama books dan authors

mysql> create database pdo;
Query OK, 1 row affected (0.05 sec)
mysql> use pdo;
Database changed
mysql> create table books(
    -> id int primary key not null auto_increment
    -> author int not null,
    -> title varchar(70) not null,
    -> isbn varchar(20),
    -> publisher varchar(30) not null,
    -> year int(4) not null,
    -> summary text(2048));
Query OK, 0 rows affected (0.17 sec)
mysql> create table authors(
    -> id int primary key not null auto_increment
    -> firstName varchar(30) not null,
    -> lastName varchar(40) not null,
    -> bio text(2048));
Query OK, 0 rows affected (0.00 sec)

Tambahkan record kedalam table author sebagai berikut:

mysql> insert into authors(firstName, lastName, bio) values(
     -> 'Marc', 'Delisle', 'Marc Delisle is a member of the MySQL
Developers Guide');
Query OK, 1 row affected (0.14 sec)
mysql> insert into authors(firstName, lastName, bio) values(
     -> 'Sohail', 'Salehi', 'In recent years, Sohail has contributed
to over 20 books, mainly in programming and computer graphics');
Query OK, 1 row affected (0.00 sec)
mysql> insert into authors(firstName, lastName, bio) values(
     -> 'Cameron', 'Cooper', 'J. Cameron Cooper has been playing
around on the web since there was not much of a web with which to
play around');
Query OK, 1 row affected (0.00 sec)

Jika anda select semua data pada table authors maka dapt dilihat recordnya sebagai berikut:

mysql> select id, firstName, lastName from authors;
+----+-----------+----------+
| id | firstName | lastName |
+----+-----------+----------+
|  1 | Marc      | Delisle  |
|  2 | Sohail    | Salehi   |
|  3 | Cameron   | Cooper   |
+----+-----------+----------+
3 rows in set (0.03 sec)

Tambahkan record pada table books sebagai berikut:

mysql> insert into books(author, title, isbn, publisher, year, 
summary) values(
     -> 1, 'Creating your MySQL Database: Practical Design Tips and
Techniques', '1904811302', 'Packt Publishing Ltd', '2006',
     -> 'A short guide for everyone on how to structure your data and
set-up your MySQL database tables efficiently and easily.');
Query OK, 1 row affected (0.00 sec)
mysql> insert into books(author, title, isbn, publisher, year, 
summary) values(
     -> 2, 'ImageMagick Tricks', '1904811868', 'Packt Publishing
Ltd', '2006',
     -> 'Unleash the power of ImageMagick with this fast, friendly
tutorial, and tips guide');
Query OK, 1 row affected (0.02 sec)
mysql> insert into books(author, title, isbn, publisher, year,
summary) values(
     -> 3, 'Building Websites with Plone', '1904811027', 'Packt
Publishing Ltd', '2004',
     -> 'An in-depth and comprehensive guide to the Plone content
management system');
Query OK, 1 row affected (0.00 sec)

Mendesain Kode

Desain arsitektur aplikasi yang baik adalah salah satu kunci membangun aplikasi selain desain data model yang benar. Pada contoh aplikasi yang akan dibuat kali ini, pertama anda harus membuat file untuk koneksi dengan database yang akan dipanggil disetiap file yang membutuhkan koneksi dengan database.

Pertama buat file dengan nama common.inc.php yang akan berisi kode untuk koneksi dengan database. Kemudian tuliskan kodenya sebagai berikut:

<?php
/**
 *File untuk koneksi 
 */
//dbconnection string dan username/password
$connStr="mysql:host=localhost;dbname=pdo";
$user="root";
$pass="";

function showHeader($title){
?>
  <html>
  <head><title><?=htmlspecialchars($title)?></title></head>
  <body>
  <h1><?=htmlspecialchars($title)?></h1>
  <a href="books.php">Books</a>
  <a href="authors.php">Authors</a>
  <hr/>
<?php 
}

function showFooter(){
?>
  </body>
  </html>
<?php    
}

//membuat connection object
$conn = new PDO($connStr,$user,$pass);
?>

Untuk menampilkan data yang ada pada table books buat file books.php, kemudian ketikan kode berikut:

<?php
include_once 'common.inc..php';

$q = $conn->query("select * from books order by title");

showHeader('Books');
?>
<table width="100%" border="1" cellpadding="3">
<tr style="font-weight: bold">
  <td>Title</td>
  <td>ISBN</td>
  <td>Publisher</td>
  <td>Year</td>
  <td>Summary</td>
</tr>
<?php
while($r=$q->fetch(PDO::FETCH_ASSOC)){
?>
  <tr>
    <td><?=htmlspecialchars($r['title'])?></td>
    <td><?=htmlspecialchars($r['isbn'])?></td>
    <td><?=htmlspecialchars($r['publisher'])?></td>
    <td><?=htmlspecialchars($r['year'])?></td>
    <td><?=htmlspecialchars($r['summary'])?></td>
  </tr>
<?php    
}
?>
</table>
<?php
    showFooter();
?>

Jika dijalankan maka tampilannya adalah sebagai berikut :

image

Untuk menampilkan data pada table author buat halaman dengan nama authors.php, kemudian ketik kodenya sebagai berikut:

<?php
include_once 'common.inc.php';
$q=$conn->query("select * from authors order by lastname,firstname");
showHeader('Authors');
?>
<table width="100%" border="1" cellpadding="3">
<tr style="font-weight: bold">
  <td>First Name</td>
  <td>Last Name</td>
  <td>Bio</td>
</tr>
<?php
    while($r=$q->fetch(PDO::FETCH_ASSOC)){
?>
    <tr>
        <td><?=htmlspecialchars($r['firstName'])?></td>
        <td><?=htmlspecialchars($r['lastName'])?></td>
        <td><?=htmlspecialchars($r['bio'])?></td>
      </tr>
<?
    }
?>
</table>
<?php
    showFooter();
?>

image

 
Menggunakan Parameter untuk menampilkan Author

Pada contoh dibawah ini akan ditunjukan bagaimana cara untuk menggunakan parameter yang dikirimkan lewat url (query string). Buat file dengan nama authordetails.php kemudian tulis kode berikut:

<?php
include_once('common.inc.php');
 
$id = $_REQUEST['id'];
$q = $conn->query("select * from authors where id=$id");
$author = $q->fetch(PDO::FETCH_ASSOC);
$q->closeCursor();
 
if(!$author){
    showHeader('Error');
    echo "Salah memasukan id author";
    showFooter();
    exit;    
}
showHeader("Author: $author[firstName] $author[lastName]");
$q = $conn->query("select * from books where author=$id order by title");
$q->setFetchMode(PDO::FETCH_ASSOC);

?>
<h2>Author</h2>
<table width="60%" border="1" cellpadding="3">
<tr>
  <td><b>First Name</b></td>
    <td><?=htmlspecialchars($author['firstName'])?></td>
</tr>
<tr>
  <td><b>Last Name</b></td>
  <td><?=htmlspecialchars($author['lastName'])?></td>
</tr>
<tr>
  <td><b>Bio</b></td>
  <td><?=htmlspecialchars($author['bio'])?></td>
</tr>
</table>

<h2>Books</h2>
<table width="100%" border="1" cellpadding="3">
<tr style="font-weight: bold">
  <td>Title</td>
  <td>ISBN</td>
  <td>Publisher</td>
  <td>Year</td>
  <td>Summary</td>
</tr>

<?php
while($r=$q->fetch()){
?>
<tr>
      <td><?=htmlspecialchars($r['title'])?></td>
      <td><?=htmlspecialchars($r['isbn'])?></td>
      <td><?=htmlspecialchars($r['publisher'])?></td>
      <td><?=htmlspecialchars($r['year'])?></td>
      <td><?=htmlspecialchars($r['summary'])?></td>
</tr>
<?php 
}
?>
</table>
<?php
showFooter();
?>

Jalankan dengan menuliskan alamat url http://localhost/authordetails.php?id=2, anda dapat melihat hasil tampilan sebagai berikut:image

Jika id yang anda masukan tidak ada misal: http://localhost/authordetails.php?id=99 maka akan muncul halaman error-nya

image

Continue reading

Ming Library dengan PHP (Part2)

ditulis oleh mahasiswa saya : Erwin (TI UKDW 03)

Mengisi Obyek Dengan Ming

Ming menyediakan tiga cara untuk melakukan pengisian obyek, yaitu pengisian obyek dengan warna, mengisi obyek dengan gradient, dan mengisi obyek dengan gambar. Kelas SWFShape() menyediakan dua fungsi untuk mengisi obyek yaitu fungsi setLeftFill() dan fungsi setRightFill(). Untuk menggunakan keduanya, perlu menggunakan SWFFill() sebagai argument. SWFFill() dapat dipanggil dengan menggunakan fungsi addFill() yang merupakan bagian dari SWFShape(). Fungsi addFill() ini mempunyai argument warna RGB. Fungsi setRigthFill() digunakan jika ingin mengisi searah dengan jarum jam, sedangkan fungsi setLeftFill() digunakan untuk mengisi berlawanan dengan arah jarum jam.

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Membuat shape baru dan mengisi obyek
   7: $square = new SWFShape();
   8: $square->setLine(5, 0, 0, 0, 255);
   9: $fill = $square->addFill(0, 255, 0);
  10: $square->setRightFill($fill);
  11: // Menggambar kotak
  12: $square->movePenTo(40, 20);
  13: $square->drawLineTo(140, 20);
  14: $square->drawLineTo(140, 120);
  15: $square->drawLineTo(40, 120);
  16: $square->drawLineTo(40, 20);
  17: // Menambahkan shape ke movie
  18: $myMovie->add($square);
  19: // Menampilkan movie
  20: header('Content-type:application/x-shockwave-flash');
  21: $myMovie->output();
  22: ?> 

clip_image002

Cara kedua yang dapat digunakan untuk mengisi obyek adalah dengan menggunakan kelas SWFGradient(). Kelas ini dapat digunakan untuk mengisi obyek dengan efek gradasi dari dua warna atau gradient. Untuk menambah warna yang akan digunakan untuk gradasi dapat dengan menggunakan fungsi addEntry(). Fungsi ini memiliki lima argument, pertama adalah ratio yang berisikan antara 0.0 dan 1.0. Ratio ini digunakan untuk menentukan seberapa banyak warna yang ditampilkan dalam satu sisi. Argument berikutnya adalah warna RGB. Untuk argument kelima bersifat opsional, yaitu chanel alpha dari warna.

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Membuat shape baru and mengatur line style
   7: $square = new SWFShape();
   8: $square->setLine(5, 0, 0, 0, 255);
   9: // Membuat gradient fill
  10: $gradient = new SWFGradient();
  11: $gradient->addEntry(0.0, 255, 0, 0);
  12: $gradient->addEntry(0.5, 255, 255, 255);
  13: // Menambah fill ke shape
  14: $fill=$square->addFill($gradient, SWFFILL_RADIAL_GRADIENT);
  15: $square->setRightFill($fill);
  16: // Menggambar kotak persegi
  17: $square->movePenTo(40, 20);
  18: $square->drawLineTo(340, 20);
  19: $square->drawLineTo(340, 220);
  20: $square->drawLineTo(40, 220);
  21: $square->drawLineTo(40, 20);
  22: // Menambahkan shapes ke movie
  23: $myMovie->add($square);
  24: // Menampilkan movie
  25: header('Content-type:application/x-shockwave-flash');
  26: $myMovie->output();
  27: ?>

clip_image002[4]

Pengisian obyek yang terakhir adalah dengan gambar. Gambar dengan format .jpg dan Define Bit Lossless (*.dbl) yang dapat dibuat dari file gambar dengan format Graphic Interchange Format (*.gif) dan Portable Network Graphic (*.png), dapat digunakan untuk mengisi obyek. Developer Ming menyediakan perangkat lunak png2dbl yang terdapat di alamat http://www.opaque.net/ming/ming-winutils.zip. Perangkat lunak ini dapat mengkonversi *.gif ke format *.dbl. Gambar perlu dipanggil ke buffer menggunakan fungsi yang disediakan PHP. Fungsi tersebut adalah fopen() dan fread(). Berikut ini adalah contoh penggunaanya:

$fp = fopen(“somefile.jpg”, “rb”);

$data = fread($fp, filesize(“somefile.jpg”));

Setelah itu data perlu dipindahkan dari buffer ke kelas SWFBitmap(). Kelas SWFBitmap() adalah kelas untuk mengisi obyek dengan gambar.

$bitmap = SWFBitmap($data);

Kelas SWFBitmap() memiliki fungsi addFill() yang digunakan untuk mengisikan data ke dalam obyek. Dalam penggunaanya memerlukan salah satu dari dua flag dibawah ini:

· SWFFILL_CLIPPED_BITMAP. Flag ini digunakan untuk memasukkan gambar ke obyek sesuai dengan ukuran gambar tersebut.

· SWFFILL_TILED_BITMAP. Flag ini digunakan untuk menyesuaikan gambar sesuai dengan ukuran dari obyek.

Berikut ini adalah contoh script untuk mengisi sebuah obyek dengan gambar yang diambil dari suatu folder dan akan menghasilkan tampilan seperti pada gambar

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Membuat shape baru and mengatur line style
   7: $square = new SWFShape();
   8: $square->setLine(5, 0, 0, 0, 255);
   9: // Membuka gambar and membaca data ke buffer
  10: $fp = fopen("dog.jpg", "rb");
  11: $data = fread($fp, filesize("dog.jpg"));
  12: // Membuat gambar bitmap baru
  13: $bitmap = new SWFBitmap($data);
  14: // mengisikannya ke shape
  15: $fill = $square->addFill($bitmap, SWFFILL_TILED_BITMAP);
  16: $square->setRightFill($fill);
  17: // Menggambar square
  18: $square->movePenTo(40, 20);
  19: $square->drawLineTo(340, 20);
  20: $square->drawLineTo(340, 220);
  21: $square->drawLineTo(40, 220);
  22: $square->drawLineTo(40, 20);
  23: // Menambah shapes ke movie
  24: $myMovie->add($square);
  25: // Menampilkan movie
  26: header('Content-type:application/x-shockwave-flash');
  27: $myMovie->output();
  28: ?>
  29:  

clip_image002[6]

Penggunaan Text Dan Font Dengan Ming

Ming menyediakan kelas SWFFont() yang berguna untuk menambahkan bentuk teks pada file movie Flash yang dibuat.

$font = new SWFFont( '_sans' );

Font yang digunakan dapat berasal dari web browser atau font yang disimpan dalam sebuah folder. Untuk font yang disimpan dalam sebuah folder memerlukan format Font Definition Block (*.fdb). Font ini adalah font yang dapat dibuat dengan mengkonversi font dengan format True Type File (*.ttf). Ming tidak dapat mengkonversikan font tersebut secara langsung secara langsung. Sehingga memerlukan sebuah perangkat lunak tambahan untuk mengkonversinya. Perangkat lunak tersebut adalah ttf2fdb yang salah satunya bisa didapat dari alamat situs http://www.amarasoftware.com/downloaddemo/makefdb.zip. Setelah membuat obyek font baru, diperlukan tempat untuk menampung font tersebut. Sehingga diperlukan kelas SWFText() atau SWFTextField().

$text = new SWFTextField();

Kemudian font dipindahkan ke dalam area teks dengan menggunakan fungsi dari kelas SWFTextField() yaitu setFont().

$text->setFont( $font );

Kelas SWFTextField() atau SWFText() memiliki dua fungsi yang digunakan untuk mengatur teks. Pertama adalah setColor() yang memiliki tiga argument warna RGB, kedua adalah setHeight() untuk mengatur tinggi atau besarnya teks, fungsi ini mempunyai satu argument yaitu tinggi teks dalam pixel. Untuk menambahkan string yang akan dimuat, dapat dengan menggunakan fungsi addString() yang diisi dengan argument string dalam tanda kutip.

   1: <?php
   2: $font = new SWFFont( '_sans' );
   3: $text = new SWFTextField();
   4: //Memuat font ke dalam teks area
   5: $text->setFont( $font );
   6: $text->setColor( 0, 0, 0 );
   7: $text->setHeight( 400 );
   8: //Menambahkan string 'Hello World'
   9: $text->addString( 'Hello World' );
  10: //Membuat movie baru
  11: $myMovie = new SWFMovie();
  12: $myMovie->setDimension( 2500, 800 );
  13: //Menambahkan teks ke dalam movie
  14: $myMovie->add( $text );
  15: //Menampilkan Movie
  16: header( 'Content-type: application/x-shockwave-flash' );
  17: $m->output( );
  18: ?>

clip_image002[8]

Menambahkan Animasi Pada Movie Flash

Pada dasarnya obyek bentuk geometri yang ditambahkan ke movie hanya ditampilkan saja dan tidak dianimasikan.

$movie->add($shape);

Untuk menambahkan animasi pada Flash dengan menggunakan Ming, memerlukan manipulasi dari penambahan obyek dengan fungsi add() yang merupakan fungsi dari kelas SWFMovie().

$shapeHandle = $movie->add($shape);

Manipulasi ini mengakibatkan pengembalian obyek SWFDisplayItem() untuk menganimasikan obyek bentuk geometri ke dalam movie Flash. Hal ini sama artinya dengan mempunyai obyek SWFDisplayItem() baru. Kelas SWFDisplayItem() mempunyai fungsi yang dapat digunakan untuk menggerakan obyek, yang pertama adalah fungsi move() yang memiliki dua argument, yaitu koordinat x dan koordinat y, yang kedua adalah fungsi moveTo() yang memiliki argument sama dengan move(). Selain itu dapat juga membuat obyek berputar dengan menggunakan fungsi rotate() yang hanya memiliki satu argument, yaitu derajat perputaran obyek yang diinginkan.

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Membuat shape baru and mengatur line style
   7: $square = new SWFShape();
   8: $square->setLine(5, 0, 0, 0, 255);
   9: // Menggambar kotak
  10: $square->movePenTo(1, 1);
  11: $square->drawLineTo(61, 1);
  12: $square->drawLineTo(61, 61);
  13: $square->drawLineTo(1, 61);
  14: $square->drawLineTo(1, 1);
  15: // Menambahkan shapes ke dalam movie
  16: $squareHandle = $myMovie->add($square);
  17: // Menggerakan shape
  18: $squareHandle->moveTo(30, 100);
  19: // Memutar shape 45 derajat
  20: $squareHandle->rotate(45);
  21:  
  22: // Tampilan dari movie
  23: header('Content-type:application/x-shockwave-flash');
  24: $myMovie->output();
  25: ?> 

clip_image002[10]

Agar pergerakannya kelihatan, maka perlu untuk melakukan perubahan pada obyek secara bertahap pada tiap frame. Untuk menggeser ke frame berikutnya dapat dengan menggunakan fungsi nextFrame() yang merupakan fungsi dari kelas SWFMovie(). Ming juga dapat melakukan animasi morphing. Animasi ini mengubah bentuk sebuah obyek ke bentuk lain. Kelas yang digunakan adalah SWFMorph() yang memiliki dua fungsi, yaitu getShape1() dan getShape2(). Keduanya tidak memiliki argument.

$morph = new SWFMorph();

$shape1 = $morph->getShape1();

$shape2 = $morph->getShape2();

Contoh penggunaanya adalah sebagai berikut:

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(5);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Membuat obyek morph baru
   7: $morph = new SWFMorph();
   8: // Membuat shape baru and mengatur line style
   9: $square = new SWFShape();
  10: $rectangle = new SWFShape();
  11: $square = $morph->getShape1();
  12: $square->setLine(5, 0, 0, 0, 255);
  13: $rectangle = $morph->getShape2();
  14: $rectangle->setLine(5, 0, 0, 0, 255);
  15: // Menggambar kotak persegi
  16: $square->movePenTo(1, 1);
  17: $square->drawLineTo(61, 1);
  18: $square->drawLineTo(61, 61);
  19: $square->drawLineTo(1, 61);
  20: $square->drawLineTo(1, 1);
  21: // Menggambar persegi panjang
  22: $rectangle->movePenTo(1, 1);
  23: $rectangle->drawLineTo(161, 1);
  24: $rectangle->drawLineTo(161, 61);
  25: $rectangle->drawLineTo(1, 61);
  26: $rectangle->drawLineTo(1, 1);
  27: $morphHandle = $myMovie->add($morph);
  28: $morphHandle->moveTo(100, 100);
  29: //Melakukan animasi secara bertahap
  30: for($i = 0.0; $i < 1.0; $i += 0.1)
  31: {
  32: $morphHandle->setRatio($i);
  33: $myMovie->nextFrame();
  34: }
  35: // Tampilan movie
  36: header('Content-type:application/x-shockwave-flash');
  37: $myMovie->output();
  38: ?>

Masih banyak lagi animasi yang dapat dilakukan oleh Ming Library, seperti skew, scale, dan lain sebagainya. Selain itu Ming Library juga mendukung action script. Untuk lebih jelasnya dapat dilihat pada http://phpbuilder.com/manual/en/book.ming.php

Link Ming Library:

Basic:

· http://jerryscript.hostrocket.com/php/ming/lessons/

Contoh:

· http://www.gazbming.com/

· http://redhot.pepper.jp/ming_php/

Ming untuk desain:

· http://www.thatmingthing.com/

Ming pada bahasa pemrograman lain:

· http://kumamushi.org/~k/ming/examples/examples.html à pada Ruby

· http://todbot.com/ming/ à Perl

Reference:

· Php manual.

· Rutledge, Matt, 2004, “PHP Game Programing” cetakan pertama, Premier.

Ming Library dengan PHP (Part1)

ditulis oleh mahasiswa saya : Erwin (TI UKDW 03)

Dengan Ming Library kita dapat membuat file Flash hanya dengan menggunakan PHP script. Ming Library adalah pustaka karya Dave Hayden yang dapat menambah kemampuan PHP untuk menghasilkan file Flash (*.swf). Ming Library mendukung sebagian besar fitur yang terdapat pada Flash 4. Ming Library juga dapat digunakan pada bahasa pemrograman C++, Ruby, Phyton dan Perl.

Untuk dapat menggunakannya kita terlebih dahulu harus memastikan Ming Library terinstall sebagai ekstensi PHP. Petunjuk menginstall Ming dapat dilihat pada http://www.opaque.net/ming/install.html. Bagi pengguna Windows, agar lebih mudah dalam melakukan instalasi, dapat mendownload XAMPP di http://www.apachefriends.org/download.php?xampp-win32-1.6.6a-installer.exe

 

Membuat Movie Flash

Untuk membuat movie Flash membutuhkan kelas SWFMovie. Script yang digunakan adalah sebagai berikut:

$myMovie->new SWFMovie();

Variabel $myMovie merupakan obyek movie baru dan dapat diberi beberapa fundamental yang ada pada movie, seperti dimensi movie, frame rate, dan warna background. Untuk mengeset dimensi pada movie, menggunakan script berikut

$myMovie->setDimension(x,y);

Dengan demikian, ukuran atau dimensi movie Flash yang dibuat berukuran lebar x pixel dan tinggi x pixel. Mengeset frame rate dapat menggunakan fungsi setRate(), sebagai berikut:

$myMovie->setRate(30);

Angka 30 menunjukan banyaknya frame yang natinya ditampilkan tiap detik. Defaultnya adalah 12. Sedangkan untuk mengatur warna background adalah sebagai berikut:

$myMovie->setBackground(0,0,0);

Dengan demikian, warna background yang dihasilkan adalah putih yang merupakan komposisi dari nilai 0 untuk red, nilai 0 untuk green, dan nilai 0 untuk blue. Untuk menampilkan file Flash secara langsung ke dalam web browser menggunakan script sebagai berikut:

header( 'Content-type: application/x-shockwave-flash' );

$myMovie->output();

Sedangkan untuk menyimpan file Flash yang dihasilkan ke dalam diektori dengan format *.swf, menggunakan script sebagai berikut:

$myMovie->save(“namafile.swf”);

Beberapa script di atas jika digabungkan menjadi satu maka akan menghasilkan script PHP yang dapat menghasilkan movie Flash.

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(0, 0, 0);
   6: // Tampilkan movie ke browser
   7: header(‘Content-type:application/x-shockwave-flash’);
   8: $myMovie->output();
   9: ?>
  10:  

Namun dengan cara ini file Flash tidak dapat ditampilkan secara spesifik sesuai dengan dimensi yang telah ditentukan. Hal ini terjadi karena file Flash berupa grafik vektor dan dapat secara dinamis memperbesar dimensinya sesuai dengan besarnya ukuran window Web browser. Cara untuk menampilkan file Flash ke browser agar sesuai dengan dimensi yang ditentukan adalah dengan cara menyimpan terlebih dahulu file Flash ke direktori dan kemudian di-embed-kan ke dalam tag HTML dengan cara sebagai berikut:

   1: <html> 
   2: <body>
   3: <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" ID=objects WIDTH=460 HEIGHT=80> 
   4: <PARAM NAME=movie VALUE="example01.swf"> 
   5: <EMBED src="example01.swf" WIDTH=400 HEIGHT=300 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
   6: </OBJECT>
   7: </body> 
   8: </html>

Sehingga file Flash yang ditampilkan pada web browser akan tampak seperti pada gambar dibawah ini

clip_image002[4]

Menggambar Bentuk Obyek Dengan Ming

Untuk menggambar bentuk geometri pada Flash membutuhkan kelas SWFShape. Kelas ini dapat digunakan untuk menggambar garis maupun kurva.

$shape = new SWFShape();

Kelas SWFShape() mempunyai dua fungsi yang dapat digunakan untuk menggambar garis dan satu fungsi untuk mendefinisikan style dari garis. Untuk mengeset style dari garis dapat menggunakan fungsi setLine() yang mempunyai lima argument, yaitu pertama adalah lebar garis dalam pixel, tiga berikutnya adalah nilai RGB dan yang terakhir chanel alpha untuk garis. Berikut adalah bentuk penulisanya secara lengkap:

$shape->setLine(5, 255, 255, 0. 255);

Sedangkan dua fungsi untuk menggambar garis adalah drawLine() dan drawLineTo(). Setiap fungsi ini memiliki dua argument yaitu koordinat x dan koordinat y. drawLine() digunakan untuk menggambar garis dari titik koordinat (x,y) pen awal ditambahkan dengan x dan y pada argument sehingga dibentuk koordinat baru (x,y), sedangkan drawLineTo() digunakan untuk menggambar garis dari titik pen awal sampai ke koordinat (x,y) yang telah ditentukan.

Untuk menentukan koordinat posisi pen atau posisi awal pen dapat dengan menggunakan fungsi movePenTo() yang juga memiliki dua argument yaitu koordinat x dan koordinat y. Berikut ini adalah contoh script yang menggunakan kedua fungsi menggambar garis yaitu drawLine() dan drawLineTo():

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Menggambar garis ke kanvas menggunakan drawLine()
   7: $line1 = new SWFShape();
   8: $line1->setLine(5, 0, 0, 0, 255);
   9: $line1->movePenTo(40, 20);
  10: $line1->drawLine(100, 100); 
  11: //sehingga garis digambar menuju koordinat (140,120)
  12: //diperoleh dari (100+40,100+20)
  13: // Menggambar garis ke kanvas menggunakan drawLineTo()
  14: $line2 = new SWFShape();
  15: $line2->setLine(5, 0, 0, 0, 255);
  16: $line2->movePenTo(80, 20);
  17: $line2->drawLineTo(200, 100);
  18: // Menambahkan shapes ke movie
  19: $myMovie->add($line1);
  20: $myMovie->add($line2);
  21: // Tampilan dari movie
  22: header('Content-type:application/x-shockwave-flash');
  23: $myMovie->output();
  24: ?>

Dari script di atas ini menghasilkan file Flash yang tampat pada web browser pada gambar

clip_image002[6]

Selain menggambar garis, Ming Library juga menyediakan dua fungsi untuk menggambar kurva yaitu drawCurve() dan drawCurveTo(). Fungsi drawCurve()digunakan untuk menggambar kurva secara relatif dari posisi awal pen. Fungsi ini memiliki empat argument, yang pertama adalah koordinat x dan y sebagai control point dari kurva, dan yang terakhir adalah koordinat x dan y yang merupakan anchor point. Ketika Ming menggambar kurva, posisi pen awal disebut sebagai source point. Sedangkan fungsi drawCurveTo() digunakan untuk menggambar kurva dimulai dari posisi awal pen dan menggambarnya menuju anchor point, dengan menggunakan control point untuk mendefinisikan bentuk dari kurva. Fungsi ini juga memiliki empat argument sama seperti pada drawCurve().

clip_image002

Berikut ini adalah contoh script penggunaan dari fungsi drawCurveTo() untuk menggambar kurva menggunakan Ming:

   1: <?php
   2: $myMovie = new SWFMovie();
   3: $myMovie->setDimension(400, 300);
   4: $myMovie->setRate(30);
   5: $myMovie->setBackground(200, 200, 200);
   6: // Menggambar kurva
   7: $curve = new SWFShape();
   8: $curve ->setLine(5, 0, 0, 0, 255);
   9: $curve ->movePenTo(40, 20);
  10: $curve ->drawCurveTo(100, 100, 100, 20);
  11: // Menambahkan shape ke movie
  12: $myMovie->add($curve);
  13: // Menampilkan movie
  14: header(‘Content-type:application/x-shockwave-flash’);
  15: $myMovie->output();
  16: ?>

Dari script di atas ini menghasilkan file Flash yang tampat pada web browser pada gambar

clip_image002[8]

Penggabungan beberapa kurva dapat digunakan untuk menggambar sebuah lingkaran. Pembuat Ming yaitu Dave telah membuat sebuah metode perhitungan untuk menggambar lingkaran dengan Ming. Berikut adalah metode yang disediakan oleh Dave untuk menggambar lingkaran dengan Ming:

   1: // draws a circle with radius $r 
   2: // centered at ($x,$y) into shape $s 
   3: $a = $r * 0.414213562; 
   4: // = tan(22.5 deg) 
   5: $b = $r * 0.707106781; 
   6: // = sqrt(2)/2 = sin(45 deg) 
   7: $s->movePenTo($x+$r, $y); 
   8: $s->drawCurveTo($x+$r, $y-$a, $x+$b, $y-$b); 
   9: $s->drawCurveTo($x+$a, $y-$r, $x, $y-$r); 
  10: $s->drawCurveTo($x-$a, $y-$r, $x-$b, $y-$b); 
  11: $s->drawCurveTo($x-$r, $y-$a, $x-$r, $y); 
  12: $s->drawCurveTo($x-$r, $y+$a, $x-$b, $y+$b); 
  13: $s->drawCurveTo($x-$a, $y+$r, $x, $y+$r); 
  14: $s->drawCurveTo($x+$a, $y+$r, $x+$b, $y+$b); 
  15: $s->drawCurveTo($x+$r, $y+$a, $x+$r, $y); 

Dengan menggabungkan metode tersebut pada kelas SWFShape(), maka dapat dibentuk suatu lingkaran yang sempurna. Berikut adalah contoh script yang digunakan untuk menggambar lingkaran dengan Ming:

 

   1: <?php  
   2: hape=new SWFShape();  
   3: hape->setLine(1,0,0,0);  
   4: hape->setRightFill(255,0,255);  
   5: = 100;  
   6:  40;  
   7:  40;  
   8:  $ra * 0.414213562; // = tan(22.5 deg) 
   9:  $ra * 0.707106781; // = sqrt(2)/2 = sin(45 deg) 
  10: hape->movePenTo($x+$ra, $y);  
  11: hape->drawCurveTo($x+$ra, $y-$a, $x+$b, $y-$b);  
  12: hape->drawCurveTo($x+$a, $y-$ra, $x, $y-$ra);  
  13: hape->drawCurveTo($x-$a, $y-$ra, $x-$b, $y-$b);  
  14: hape->drawCurveTo($x-$ra, $y-$a, $x-$ra, $y);  
  15: hape->drawCurveTo($x-$ra, $y+$a, $x-$b, $y+$b);  
  16: hape->drawCurveTo($x-$a, $y+$ra, $x, $y+$ra);  
  17: hape->drawCurveTo($x+$a, $y+$ra, $x+$b, $y+$b);  
  18: hape->drawCurveTo($x+$ra, $y+$a, $x+$ra, $y);  
  19: ovie=new SWFMovie();  
  20: ovie->setDimension(400,300);  
  21: ovie->setBackground(255,0,0);  
  22: //Menambahkan shape ke movie
  23: stCircle=$myMovie->add($myShape);  
  24: stCircle->moveTo(100,100);  
  25: enampilkan movie
  26: er(‘Content-type:application/x-shockwave-flash’);
  27: ovie->output();
  28:  

clip_image002[10]