Rabu, 09 Oktober 2013

PHP. Upload File Tipe BLOB dan Penerapan

PHP?

LANGKAH – LANGKAH MENGUPLOAD FILE KE DATABASE (tipe BLOB)

Upload atau dalam bahasa indonesia unggah, berarti mengirim file dari komputer client ke komputer server. Proses upload telah banyak digunakan oleh web – web ternama sebagai file hosting, dan tentu saja dibutuhkan kapasitas memory yang lebih besar dari sisi server. Sementara itu dari segi client sebelum melakukan proses upload biasanya harus memiliki akun dari website penyedia layanan penyimpanan file ini. Akun inilah yang kemudian digunakan untuk beberapa keperluan, seperti link download bagi pemilik akun. Atau hanya sekedar dijadikan media penyimpan data secara online, yang tentunya bisa menghemat kapasitas hardisk pemilik akun.

Beberapa website penyedia layanan unggah file antara lain :

1    Facebook
Didalam aplikasi ini pengguna dapat mengunggah foto, video atau file – file lainya. Aplikasi ini digunakan sebagai media komunikasi publik atau sering disebut jejaring sosial karena siapapun bisa menggunakan aplikasi ini.
 
2.    4shared
Mungkin bagi anda yang mempunyai akun di 4shared sudah terbiasa melakukan proses upload file. Proses upload ini juga mengharuskan client tersebut sebagai user. Sehingga proses upload dapat jelas kepemilikan file. 4shared banyak digunakan sebagai media penyimpan file untuk link download, yang tentunya setiap kali proses download terjadi ada timbal balik tersendiri bagi pemilik akun.
 
3.    Youtube
Jika anda memiliki video yang menarik, anda dapat mengunggahnya di situs ini gratis, dengan catatan anda adalah member dari situs tersebut.
 
4.    Dll (hampir setiap aplikasi internet dapat melakukan proses upload / download)


Sebelum memulai pembahasan mengenai upload file ke database terlebih dahulu kita cermati kebutuhan yang akan digunakan nantinya :

1.    Database : imagedb

a.    Tabel : image (id, name, image, type, size).
2.    File – file PHP meliputi :

a.    Config.php
b.    Index.php
c.    Save.php
d.    Show.php
e.    GetImage.php

Nah semua kebutuhan telah tersedia sekarang tinggal memulai proses pengerjaan, sebelumnya kita buat dulu database beserta tabelnya dengan SQL berikut :

--
-- Database: `imagedb`
--
CREATE DATABASE `imagedb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `imagedb`;

-- --------------------------------------------------------

--
-- Table structure for table `image`
--

CREATE TABLE `image` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(32) NOT NULL,
  `image` longblob NOT NULL,
  `type` varchar(32) NOT NULL,
  `size` varchar(32) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE DATABASE `imagedb` digunakan untuk membuat database dengan nama imagedb.
USE `imagedb` digunakan untuk mengakses ke database imagedb sebelum proses pembuatan tabel berlangsung. Sementara CREATE TABLE `image digunakan untuk membuat tabel dengan struktur :


Tabel sudah terbuat sekarang kita membuat file – file php sebagai media proses upload filenya.

1.    Config.php

<?php
/*
config.php
untuk mengakses database imagedb
*/
  $host='localhost';
  $user='root';
  $pass='';
  $dbname='imagedb';
  $connect = mysql_connect($host,$user,$pass) or die(mysql_error());
  if($connect){
        $db=mysql_select_db($dbname) or die(mysql_error());
    }
?>

Pada script diatas mysql_connect digunakan untuk mengakses ke localhost dengan parameter yang dibawa adalah nama host (karena percobaan menggunakan web server lokal maka tulis localhost) $host juga bisa ditulis menggunakan alamat IP (IP Address) komputer server, jika kita menggukan komputer lokal maka bisa ditulis localhost atau alamat IP-nya 127.0.0.1. Kemudian username yang ada di MySQL beserta password yang digunakan. Pada defaultnya MySQL mempunyai username “root” dan tanpa password. Kemudian pada variabel $dbname isikan nama database yang telah dibuat tadi. Query mysql_select_db digunakan untuk mengakses ke dalam database imagedb. Kemudian script mysql_error digunakan untuk menampilkan pesan error jika mungkin terdapat kesalahan dalam menulis program atau kendala teknis yang lain.

2.    Index.php

<html>
<head>
    <title>Form Upload</title>
<style typpe='text/css'>
body{font-family: tahoma,arial,helvetica;}
table.upload{width: 400px;height:auto;border: 0.1em solid #5a6600;text-align: left;font-size: 12px;background: #fdfad9;}
</style>
</head>
<body>
<form method='POST' action='save.php' enctype='multipart/form-data'>
<table class='upload'>
    <tr>
        <th colspan='2'>Pilih File</th>
    </tr>
    <tr>
        <td>Pilih File</td>
        <td><input type='file' name='foto' /><input type='submit' name='upload' value='Unggah' /></td>
    </tr>
</table>
</form>
</body>
</html>

Pada kode diatas akan menampilkan output seperti berikut :

Index

3.    Save.php

<?php
//membuka koneksi ke MySQL
include('config.php');

//mengambil parameter yanmg dikirim dari form
$file = $_FILES['foto']; //bentuknya array
$upload = $_POST['upload'];

//mengambil atribut dari file misal (nama,tipe, dan kode binary)
$file_name = addslashes($_FILES['foto']['name']);   //nama file
$file_type = $_FILES['foto']['type'];               //type file
$file_size = $_FILES['foto']['size'];               //ukuran file dalam byte
$tmp_name = $_FILES['foto']['tmp_name'];            //path tempat file tersimpan

//jika data ada isinya maka lakukan insert data
if(!empty($upload) and !empty($file_name)){

//lakukan proses filter tipe file
if($file_type == "image/jpeg" or
    $file_type == "image/jpg" or
    $file_type == "image/png" or
    $file_type == "image/gif"){
   
    //lakukan filter ukuran file
    if($file_size > "90000"){
        echo"ukuran file terlalu besar, <a href='javascript: history.go(-1);'> Ulangi </a>";
    }else{
        $imgData = addslashes(file_get_contents($tmp_name)); //mengambil kode binary dari path file
        $ukuranFoto = getimagesize($tmp_name);
        $ukuranFoto2 = addslashes($ukuranFoto[3]); //mengambil ukuran file foto
       
        //lakukan insert
       
        $queryInsert = mysql_query("insert into image values(null,'$file_name','$imgData','$file_type','$ukuranFoto2')")or die('Foto gagal ditambahkan : '.mysql_error());
        if($queryInsert){
         echo"
            <script type='text/javascript'>
                alert('File berhasil diupload');
                document.location= 'getImage.php';
            </script>
         ";
        }else{
         echo"
            <script type='text/javascript'>
                alert('File gagal diupload');
                document.location= 'index.php';
            </script>
         ";    
        }
    } //jika ukuran file telah sesuai

}else{

// jika tipe file salah
echo"tipe file salah, <a href='javascript: history.go(-1);'> Ulangi </a>";

} //jika tipe file benar

}else{

//bila file yang diupload kosong
echo" file kosong, <a href='javascript: history.go(-1);'> Ulangi </a>";

}
?>

Penjelasan :

//mengambil atribut dari file misal (nama,tipe, dan kode binary)
$file_name = addslashes($_FILES['foto']['name']);   //nama file
$file_type = $_FILES['foto']['type'];               //type file
$file_size = $_FILES['foto']['size'];               //ukuran file dalam byte
$tmp_name = $_FILES['foto']['tmp_name'];            //path tempat file tersimpan

Script diatas digunakan untuk mengambil atribut yang dibawa oleh form yaitu nama file, tipe file, ukuran file, dan alamat asal file. Sementara script addslashes diatas digunakan untuk mengatasi jika ada tanda petik ( ‘ ) yang bisa menyebabkan query error.

$imgData = addslashes(file_get_contents($tmp_name)); //mengambil kode binary dari path file

Baris kode diatas digunakan untuk mengambil kode binary yang akan dicopy kedalam database. Jika anda ingin melihat bagaimana kode binary tersebut. Cukup tambahkan echo didepan variabel $imgData.

$ukuranFoto = getimagesize($tmp_name);
        $ukuranFoto2 = addslashes($ukuranFoto[3]); //mengambil ukuran file foto
       
        //lakukan insert

Ukuran foto berupa panjang dan lebar dapat diperoleh dengan menggunakan fungsi seperti diatas dan mendapatkan output width=”x” height=”y”.

4.    Show.php

<?php
  include("config.php");
  //mengambil nilai id yang melakukan request
  $id=$_GET['image_id'];
 
  //lakukan query
  $sql="SELECT * from image where id='$id'";

  $query=mysql_query($sql) or die(mysql_error());

  while($result=mysql_fetch_array($query)){    
    header("Content-type:".$result['type']);
    header('Content-Disposition: inline; filename="'.$result['name'].'"');
    echo $result['image'];         
  }
?>

Pada script diatas $id mendapatkan nilai dari file yang memanggilnya untuk mengambil data gambar. Lalu dilakukan pencarian gambar berdasarkan id yang diminta kemudian dikembalikan lagi data gambar tersebut kepada file peminta.

5.    getImage.php

<html>
<head>
    <title> Get Image</title>
<style type='text/css'>
body{text-align: center;}
img{width: 300px;height: auto;border: none;}
</style>
<head>
<body>
<?php
/*
getImage.php
digunakan untuk menampilkan gambar berdasarkan id terpilih
*/
$idImage = "27";
echo" Gambar dengan ID : $idImage <br/><img src='show.php?image_id=$idImage' />";
?>
</body>
</html>

File diatas diggunakan untuk menampilkan gambar berdasarkan id yang telah dicari, misalkan gambar dengan id 27.

Praktik :
Index.php

getImage.php


sekarang kita sudah bisa melakukan proses upload file gambar untuk pengembangan upload file – file yang lain bisa anda kreasikan sendiri. Dan semoga artikel ini bisa bermanfaat untuk kita semua. Terimakasih telah membaca..

*silakan copy kalau ingin memperluas informasi ini, dengan catatan tambahkan alamat sumber, jika teman – teman memiliki saran yang membangun kedepanya, sangat penulis harapkan.

terima kasih


Ikhwan Anshori

Like This Article ?

0 komentar

Posting Komentar

Cari sesuatu?

Teman

 
 
Copyright © 2013 goldenbooks - All Rights Reserved
Golden Books - Powered By Blogger