Ads

Sabtu, 02 April 2011

Mengubah Ukuran File yang di Upload dengan PHP

Jika kita bikin web, dan didalam web kita itu ada fasilitas upload image-nya, sebaiknya selain kita membatasi ukuran image file yang di upload, misal dengan menggunakan input hidden:


<input type="hidden" name="MAX_FILE_SIZE" size="20" type="hidden" value="1000000" />


Kita juga harus memastikan bahwa file yang di upload itu memiliki ukuran yang memang pas untuk web kita (biasanya sih ukuran 640 x 480). Dan satu lagi, kita juga harus punya satu file thumbail dari file image tersebut, sehingga saat ada user yang datang untuk sekedar browsing-browsing atau hanya mencari file gambar terntentu, tidak perlu di paksa untuk melihat image berukuran besar yang nantinya malah menghabiskan bandwith user yang bersangkutan.


Masalahnya, kita juga tidak bisa memaksa user, sebelum mengupload gambar, membuat file sendiri berukuran 640 x 480 dan juga file ukuran thumbnail-nya. Lalu bagaimana solusinya?



Solusinya adalah, kita yang membantu user dalam men-generata file thumbnail dan mengubah size file image yang di upload. Gw udah pernah nulis tentang cara upload standar di sini, jadi jika hanya mau upload file biasa, cek aja halaman tersebut, sedangkan bagi yang mau tau cara menangani file image, read on friend.


Sebelum mulai mengkoding, pertama-tama kita harus setting terlebih dahulu, file php.ini kita (biasanya ada di C:\Windows) atau sebagian ada di folder server, bagi yang mau upload di Web Host, gak perlu khawatir, karena untuk library ini biasanya udah di aktifin.


Ok, buka php.ini pake notepad, terus cari aja (tekan ctrl+f) "php_gd2.dll" maka anda akan bertemu dengan line ";extension=php_gd2.dll", hilangkan tanda titik komanya (";") sehingga linenya menjadi seperti ini:


extension=php_gd2.dll


Ok, save file php.ini nya. Terus pastiin di Folder PHP/EXT atau di Windows/System atau Windows/System32 ada file yang namanya php_gd2.dll.


Jika ada, mari kita lanjutkan, tetapi jika tidak ada, coba cari file tersebut di http://www.boutell.com/gd/.


Ok, pertama-tama, buat file dengan nama JoUploadPicture.php.


Isi file-nya adalah sebagai berikut:


<?php



class JoUploadPicture
{
var $save_dir; //Tempat Save File
var $filename="gambar.gif"; //default file name
var $error_message=""; //String Error
var $width; //width image
var $height; //height image
var $ext; //extension yang di gunakan
var $thumb_width = 128; //Ukuran Thumbnail
var $thumb_height = 96; //Ukuran Thumbnail

function JoUploadPicture()
{
//kalo mau nambahin silakhan
//fungsi ini adalah constructor, di panggil pada saat kita buat instance

}

//set ukuran thumbnail
function setThumbSize($width, $height)
{
$this->thumb_width = $width;
$this->thumb_height = $height;
}



//save_directory = di gunakan untuk menentukan lokasi file akan di simpan di mana
//file array = Tempat menampur variabel dari kontrol FILES (var $_FILES)
//max_width = width max file hasil upload
//max_heigh = height max file hasil upload
//Tergantung lebih besar yang mana, max width atau max height yang akan di gunakan
//Nama = nama file setelah di upload
//Pic = isi yes jika yang di upload adalah image jpg & gif
//del = extension jika pic bukan yes



function upload($save_directory, $file_array, $max_width, $max_height,
$nama, $pic="yes",$del="no")
{
//Simpan data directory ke var save_dir
$this->save_dir = $save_directory;


//Simpan data width & height max
$this->width = $max_width;
$this->height = $max_height;

//Simpar var $_FILES
$temp_filename = $file_array['name'];

//mengambil extension daru file
$ext = explode('.',$temp_filename);
$ext = strtolower($ext[count($ext)-1]);


//membuat file sementara dengan nama waktu.extension
$temp_filename = time().".".$ext;

//Apakah yang di upload pic
if($pic=="yes")
{

//check apakah jpeg atau gif (gw malas buat yang png,
//tapi untuk fungsinya mirip semua kok)

if (preg_match('/^(gif|jpe?g)$/',$ext)) {



//ambil size pic original
list($width_orig, $height_orig) = getimagesize($file_array['tmp_name']);



//Generate ukuran Thumbail dan ukuran file hasil upload,
//ukurang thumbail default 128, 96

if($this->width > $width_orig && $this->height> $height_orig)
{


$this->width = $width_orig;
$this->height = $height_orig;
if($this->width/$this->thumb_width > $this->height / $this->thumb_height)
{
$thumb = $this->width / $this->thumb_width;
}
else $thumb = $this->height / $this->thumb_height;

}
elseif ($this->width && ($width_orig < $height_orig)) {
$this->width = ($this->height / $height_orig) * $width_orig;
$thumb = $this->width / $this->thumb_width;

} else {
$this->height = ($this->width / $width_orig) * $height_orig;
$thumb = $this->height / $this->thumb_height;


}

//Buat file image
$image_p = imagecreatetruecolor($this->width, $this->height);
$image_a = imagecreatetruecolor($this->width/$thumb, $this->height/$thumb);
//buat jpeg & gif, kalo png seharusnya sama aja scirptna,
//yg gif or jpg di replace jadi png
//tapi gw belum nyoba si, abis malas :P
if($ext=='gif'){
$image = imagecreatefromgif($file_array['tmp_name']);
imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$this->width, $this->height, $width_orig, $height_orig);

$hsl = imagegif($image_p, $this->save_dir."asli_".$nama.'.'.$ext, 80);
imagecopyresampled($image_a, $image, 0, 0, 0, 0,
$this->width/$thumb, $this->height/$thumb, $width_orig, $height_orig);
$hsl = imagegif($image_a, $this->save_dir."thumb_".$nama.'.'.$ext, 80);



}
else
{
$image = imagecreatefromjpeg($file_array['tmp_name']);
imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$this->width, $this->height, $width_orig, $height_orig);
imagejpeg($image_p, $this->save_dir."asli_".$nama.'.'.$ext, 80);
imagecopyresampled($image_a, $image, 0, 0, 0, 0,
$this->width/$thumb, $this->height/$thumb, $width_orig, $height_orig);
$hsl = imagejpeg($image_a, $this->save_dir."thumb_".$nama.'.'.$ext, 80);
}


$this->ext=$ext;

//Setelah image di simpan, object image di hancurkan
imagedestroy($image_p);
imagedestroy($image_a);
imagedestroy($image);
$this->filename=$temp_filename;
return $hsl;
}else{
$this->error_message.="File yang di Upload bukan JPEG atau GIF";
return false;
}
}
else
{
//Jika bukan pic, maka file di upload secara biasa
$this->hapus($this->save_dir."asli_".$nama.'.'.$del);
$this->hapus($this->save_dir."thumb_".$nama.'.'.$del);




if (move_uploaded_file($_FILES['userfile']['tmp_name'],
$this->save_dir."asli_".$nama.'.'.$ext)) {


$this->ext=$ext;
return true;
} else {
$this->error_message.="File Gagal di Upload";
return false;
}
}

}


//untuk menghapus file
function hapus($addr)
{

//cek apakah file ada
if(file_exists($addr))
{


//hapus file dengan perintah unlink
if(unlink($addr))
{

return true;

}
else
{
$this->error_message.="Hapus Gagal";
return false;
}



}
else
{
$this->error_message.="file tidak di temukan";
return false;
}


}
}
?>

Ok, setelah itu, saatnya bikin file yang menggunakan class ini, coba saja buat file namanya uploadImage.php, dan letakan filenya dalam folder yang sama dengan class yang barusan kita buat.



Ok sekararang coba jalanin scriptnya, nanti setiap kita upload picture, maka akan terupload 2 file, yaitu file besar dan file thumbail. Mengenai lokasi tempat dimana kita meletakan file, gunakan variabel SERVER saja.

<form enctype="multipart/form-data" action="uploadImage.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Alamat File : <input name="userfile" type="file" />
<input type="submit" value="Upload" name="cek" />
</form>



<?php
// Untuk PHP versions dibawah 4.1.0, gunakan $HTTP_POST_FILES
// sedangkan 4.1.0 keatas gunakan $_FILES.



if(isset($_POST['cek']))
{
//ALAMAT TEMPAT KITA MELETAKAN FILE
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'\blog\\'; // Tempat Upload File



//panggil file class
include "JoUploadPicture.php";



//Buat instance
$joup = new JoUploadPicture();



//panggil fungsi upload
$result = $joup->upload($uploaddir, $_FILES['userfile'], 640, 480, "JoImage");
if($result)
{
echo "Berhasil";
}
else
{
echo "Gagal";
}


}



?>


Berikut ini adalah Contoh Nilai var $_SERVER:
Array
(
[COMSPEC] => D:\WINDOWS\system32\cmd.exe [tempat console]
[DOCUMENT_ROOT] => c:/apache/htdocs [alamat www]
[HTTP_ACCEPT] => KONTENT YANG DI TERIMA APA SAJA, ex img/jpeg
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_ACCEPT_LANGUAGE] => en-US
[HTTP_CONNECTION] => Keep-Alive
[HTTP_HOST] => localhost:81
[HTTP_REFERER] => http://localhost:81/blog/
[HTTP_UA_CPU] => x86
[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
[PATH] => Var di set PATH;
[PHPRC] => C:/apache
[REDIRECT_PHPRC] => C:/apache
[REDIRECT_STATUS] => 200
[REDIRECT_URL] => /blog/uploadImage.php [ALAMAT FILE]
[REMOTE_ADDR] => 127.0.0.1
[REMOTE_PORT] => 1040
[SCRIPT_FILENAME] => c:\apache\htdocs\blog\uploadimage.php [NAMA & ALAMAT SCRIPT]
[SERVER_ADDR] => 127.0.0.1
[SERVER_ADMIN] => admin@localhost
[SERVER_NAME] => localhost
[SERVER_PORT] => 81
[SERVER_SIGNATURE] =>
Apache/1.3.23 Server at localhost Port 81


[SERVER_SOFTWARE] => Apache/1.3.23 (Win32)
[SystemRoot] => D:\WINDOWS
[WINDIR] => D:\WINDOWS
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /blog/uploadImage.php
[SCRIPT_NAME] => /blog/uploadImage.php
[ORIG_PATH_TRANSLATED] => c:\apache\htdocs\blog\uploadimage.php
[ORIG_PATH_INFO] => /blog/uploadImage.php
[ORIG_SCRIPT_NAME] => /php/php-cgi.exe
[ORIG_SCRIPT_FILENAME] => c:/php/php-cgi.exe
[PHP_SELF] => /blog/uploadImage.php
[REQUEST_TIME] => 1210250499
[argv] => Array
(
)

[argc] => 0
)

OK Gw rasa dah cukup jelas, kalo masih bingung, coba donlod file contohnya di sini.

huhuhu


4 Responses to “Mengubah Ukuran File yang di Upload dengan PHP”

rina says:
February 11, 2009 at 11:51 am (Edit)

bagaimana cara untuk hapus file foto di php.scripna apa?
admin says:
February 11, 2009 at 7:48 pm (Edit)

pake command unlink(’namafile’);
indhie says:
October 20, 2009 at 10:20 pm (Edit)

masih bingung mas
Johan Firdaus says:
October 26, 2009 at 10:12 pm (Edit)

bingung di mana?

Tidak ada komentar: