Tampilkan postingan dengan label Tutorial PHP. Tampilkan semua postingan
Tampilkan postingan dengan label Tutorial PHP. Tampilkan semua postingan

Bermain LDAP dengan PHP

Aseekkkk nambah lagi ilmunya, kali ini kita bermain-main dengan LDAP yuk. LDAP apaan sih ??
LDAP (Lightweight Directory Access Protocol) merupakan suatu network protokol yang digunakan untuk mengakses direktori.

Pengertian direktori disini adalah sekumpulan informasi yang disusun berdasarkan hirarki tertentu. Sebuah direktori merupakan sebuah database, yang pengelolaan informasinya di dasarkan pada atribut setiap item datanya, atribut-atribut tersebut diantaranya :
uid -> User id
cn -> Common Name
sn -> Surname
l -> Location
ou -> Organisational Unit
o -> Organisation
dc -> Domain Component
st -> State
c -> Country

Ok cukup sekilas tentang LDAP, kita lanjut ke pokok permasalah. Buat ente yang blum pernah berhubungan dengan LDAP sebelumnya, jangan merindik duluan.... koneksi LDAP dengan PHP ternyata tidak sesulit yang dibayangkan, simple dan mudah dimengerti. Siap-siap.... berikut langkah-langkahnya.

1. Buka phpinfo() dulu, pastikan LDAP sudah dalam posisi Enable, klo blum, buka file php.ini, perhatikan pada bagian ini ";extension=php_ldap.dll", hilangkan titik koma (;) di depannya.

2. Perhatikan skrip berikut :

<?php
$ldap_host = '123.456.7.89'; //Host LDAP
$ldap_domain = 'mazhters.com'; // LDAP Domain
$ldap_dn = 'dc=mazhters,dc=com'; // Domain Component
// Jika $ldap_domain = 'mazhters.co.id'; 
// maka $ldap_dn = 'dc=mazhters,dc=co,dc=id';
$ldap_user = 'userlogin';
$ldap_pass = 'userpass';

$ldap_conn = ldap_connect($ldap_host);
if($ldap_conn) 
{
// menyatukan aplikasi dengan server LDAP
$ldapbind = ldap_bind($ldap_conn, $ldap_user, $ldap_pass);
// verify binding
if (!$ldapbind){
die('Login gagal, userlogin or userpass salah');
}
}
else
{
die('Koneksi ke LDAP Gagal');
}

//Ada beberapa server yang mesti minta set_option ini dulu
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);

//Mencari nilai-nilai dari atribut LDAP sesuai filter yang di inginkan.
//Sample yg ane pake ini untuk mencari nilai-nilai atribut berdasarkan userlogin
$result = ldap_search($ldap_conn, $ldap_dn, "(samaccountname=".$ldap_user.")");

//Nah ini untuk narik nilai atributnya.
$entries = ldap_get_entries($ldap_conn, $result);

//Ini untuk munculin, tinggal dipilih-dipilih value mana yang mau diambil
echo "<pre>";
print_r($entries);
echo "</pre>";
die();
?>

Mudahkan ?? nah dari sini tinggal di explore lagi sesuai kebutuhan.

Login website via Facebook

Wah wah udah lama banget ga nulis tutorial, berarti ilmunya blum nambah2 nih... payah.... Yuk kita saling sharing lagi, cekidot.

Mungkin ente sering mengunjungi website yang mengharuskan ente daftar kemudian login untuk dapat masuk kedalamnya. Malahan saking banyak-nya website seperti itu yg ente kunjungi, al hasil sampe lupa username n passwordnya karena kelamaan ga buka2 lagi. Karena issue itu, para developer mencari cara bagaimana memudahkan user untuk melakukan login, salah satunya dengan menggunakan account Facebook untuk login ke website.

Seberapa hebat sih metode ini ?? Jika selama ini kita harus masukkan username n password untuk login ke website yg dituju, dengan menggunakan metode ini, maka cukup dengan sekali klik, otomatis anda sudah login jg ke website yg bersangkutan, dengan catatan ente pada posisi sudah login di Facebook, tapi jika blum login di Facebook, otomatis engine akan meminta ente untuk login dulu. Sebagai contoh yang
pernah ane bikin di sini. Dan berikut langkah-langkahnya :

1. Punya Account facebook (ini syarat utama... hehehe).
2. Pastikan email yg anda gunakan untuk mendaftar di Facebook dan di website yang dituju, harus sama (karena kita akan menggunakan field email ini untuk comparasi).
3. Buat aplikasi baru di Facebook, pada posisi ini ane anggap ente sudah bisa membuat aplikasi di Facebook yang paling sederhana, klo blum, coba cari tau gimana cara bikin aplikasi di Facebook.
4. Masukkan script berikut di folder tempat aplikasi Facebook ente.

Pada tahap ini sebenarnya login menggunakan Facebook sudah selesai, tinggal bagaimana memodifikasi engine login di website ente dengan parameter email yang didapat dari email Facebook. Berhubung setiap programmer memiliki gaya yg berbeda di engine login ini, jd klo ada yg masih bingung, bisa langsung tanya ke ane ya.... bisa via YM, Email or Lewat sini jg boleh.

Selamat mencoba.....

Sedikit cara Optimasi aplikasi web dengan PHP

Sedikit cara untuk meng-optimasi aplikasi website memang sangat2 penting, untuk scala kecil, cara ini sih emang ga bakal ada pengaruhnya, tp klo untuk scala besar, beda 1 per sekian detik aja sangat -sangat membantu, seperti orang bijak bilang, "batu kecil memang tidak melukai, tapi bisa membuat kita tergelincir". 

Berikut adalah hal-hal yang perlu diperhatikan dalam membuat coding PHP :
1. Hindari penggunaan spasi secara berlebihan.
Menghindari penggunaan spasi (atau &nbsp;) yang berlebihan adalah langkah efisien. Coba anda bayangkan setiap spasi memerlukan 1 byte data, sedangkan setiap tab (\t) juga 1 byte. Ketika kita membuat empat spasi,  berarti kita telah menghabiskan 4 byte data. Tentu akan lebih efisien jika hanya menggunakan sebuah tab saja.

2. Penggunaan tipe data Boolean.
PHP mengijinkan Anda menulis tipe data boolean dengan huruf kecil atau besar (case-insensitive). Meskipun demikian, penulisan dengan huruf kecil semua akan lebih cepat dibanding huruf besar. Ini dikarenakan, saat menemukan konstanta, PHP melakukan lookup hash nama konstanta. Misalnya :

if($var == TRUE) { ...... }

akan lebih efisien jika ditulis,
if($var == true) { ....... }

dan akan lebih cepat lagi jika kita menggunakan 1 dan 0 dari pada true and false.

3.Hindari konkatenasi string yang besar.
Pada saat melakukan konkatenasi string, hindari penggabungan dengan string yang ukurannya besar. Ini bisa menghambat eksekusi kode yang sebenarnya bisa ditampilkan dengan cepat. Contohnya seperti berikut:

$title = 'pendek';
$body = '...ini kalimat yang lebih panjang...';


// Konkatenasi string yang besar
echo "Hasilnya: $title\n\n$body";

// Akan lebih baik jika ditulis seperti ini
echo "Hasilnya: $title\n\n";
echo $body;


4. Penggunaan echo() dan print().
Tiga cara yang umum dilakukan untuk mencetak data adalah: echo() dan print()
. Apabila untuk mencetak output dengan menggunakan fungsi (konstruksi bahasa) PHP, sebaiknya gunakan echo(), bukannya print(). Meskipun secara garis besar print() dan echo() memiliki tujuan sama, akan tetapi ada beberapa perbedaan esensial yang perlu diperhatikan. Fungsi print() berperilaku seperti fungsi pada umumnya, dan memiliki nilai kembalian (return value) berupa integer 1. Dengan demikian, print() dapat digunakan sebagai bagian dari ekspresi yang lebih kompleks. Sementara itu, echo() mampu menerima lebih dari satu parameter sekaligus,
dan tidak memiliki nilai kembalian.


print 'coba 1';
echo 'coba 1';


// Menggunakan beberapa parameter
echo 'Coba 1', "Coba 2", '...';

 
Fungsi string echo() akan dieksekusi lebih cepat dibanding dengan print(). Perbedaan ini disebabkan karena fungsi print() akan mengembalikan status (integer) yang menyatakan apakah proses berhasil dilaksanakan atau tidak. Di sisi lain, echo() hanya menampilkan output saja dan tidak mengerjakan apa-apa lagi. Ada pun dalam implementasinya, status nilai kembalian dari penggunaan fungsi string hampir tidak pernah diperlukan.


Konstruksi bahasa echo() juga mengijinkan kita untuk memberikan lebih dari satu string sebagai parameter. Menggunakan beberapa parameter akan lebih cepat dibanding mencampur variabel ke dalam sebuah parameter tunggal. Contohnya seperti berikut:
$a = 'Coba';
$b = 'Lagi';


//mencampur menjadi parameter tunggal
echo 'Harus ' .$a. ' dipahami ' .$b;
 

//akan lebih cepat
echo 'Say ', $a, ' to ', $b;




5. Mengetahui panjang string.
Biasanya untuk mengetahui panjang karakter dari suatu string adalah dengan menggunakan fungsi strlen(). Untuk tujuan yang sama, sebenarnya ada cara yang dinilai lebih cepat, yaitu menggunakan isset(). Contohnya seperti berikut:

if (strlen($str) < 10) {
echo 'Panjang karakter harus 10 ya';
}


//akan lebih cepat
if (!isset($str{10})) {
echo 'Panjang karakter-nya kurang/lebih dari 10 tuh';
}

Seperti halnya kasus echo() dan print(), isset() memerlukan waktu eksekusi lebih pendek karena  isset() merupakan konstruksi bahasa.


6. Penggunaan kondisi perbandingan antara variabel dengan konstanta.
Kita dalam penggunaan kondisi perbandingan antara variabel dengan konstanta seperti ini :
if($var == '4') { .... }, tetapi akan lebih cepat apabila konstanta disebutkan terlebih dahulu,
if('4' == $var) { .... }.


Gimana guys, hal-hal simple bukan ?? Ini hanya beberapa cara sederhana untuk mengoptimasi aplikasi PHP, masih banyak faktor lain yg berpengaruh untuk masalah ini, mulai dari server dan databasenya.

Progress Bar MultiFile Upload di PHP 5.

Wah2, dah lama banget nih ga bikin tutorial, materi yg mau di tulis sih banyak, cuma waktunya aja yg ga memungkinkan, sampe-sampe materi yg udah disiapin, lupa deh nyimpennya dimana. Well2, kita mulai lagi tutorialnya dari bagaimana membuat Progress Bar MultiFile Upload di PHP.

Sebenernya udah banyak tutorial yg bicara soal Progress Bar di PHP, lengkapnya bisa masuk ke sini, tp itu untuk 1 file saja, nah disini ane coba membuat progress bar untuk multi file, dalam arti-an macam kirim email melalui yahoo or gmail gitu, bisa langsung attach file lebih dari 1, OK kita mulai y......

Berpedoman pada link di atas tuh, ane anggap ente dah bisa install APC dan berjalan dengan baik untuk upload 1 file, klo blum, coba pelajari link di atas dengan seksama, disitu udah super duper lengkap kok. Kemudian yg perlu disiapkan adalah file jquery.js dan jquery.MultiFile.js, berikut adalah script yg diperlukan :

Javascript-nya :

<script src="jquery.js" type="text/javascript" language="javascript"></script>
<script src="jquery.MultiFile.js" type="text/javascript" language="javascript"></script>
<script>
function createRequestObject() 
{
    var requestObject;
    requestObject = false;
    if( window.ActiveXObject ){
        for( var i = 5; i; i-- ){
            try{
               if( i == 2 ){
                requestObject = new ActiveXObject( "Microsoft.XMLHTTP" );    
            }else{        
                requestObject = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
            }
            break;
          }catch( excNotLoadable ){                        
                requestObject = false;
          }
        }
    }else{
        requestObject = new XMLHttpRequest();
    }
    return requestObject;
}


var http = createRequestObject();


function postForm(formName){
  document.getElementById(formName).submit();
  setTimeout('updateProgress()', 100);
}

function updateProgress(){ 
  progress_key = document.getElementById('progress_key').value;
  http.open("GET", 'upload.php?progress_key='+progress_key, true);
    http.onreadystatechange = function () {
        if (http.readyState == 4) {
            if (http.status == 200) {
              the_object = eval("(" + http.responseText + ")");            
              if(!the_object.done){
               result = Math.round((the_object.current/the_object.total) * 100);
                var hasil = Math.round((result/100)*200);
                var xxx = "<div style='width:200px;border:1px solid #000;float:left;'><div style='background:#F00;width:"+hasil+"px;display:block;'>&nbsp;</div></div><div style='float:left;'>"+result+"%</div>";
                
                document.getElementById('progress_win').innerHTML = xxx;
                setTimeout("updateProgress()",500);
              }else{
                var xxx = "<div style='width:200px;border:1px solid #000;float:left;'><div style='background:#F00;width:200px;display:block;'>&nbsp;</div></div><div style='float:left;'>100%</div>";
                document.getElementById('progress_win').innerHTML = xxx;
              }
            }
        }
    }
  http.send(null);
}
</script>


Ini Css-nya :

<style>
.realupload  {
position:absolute;
top:1;
right:1;
left:0;
cursor: pointer;
/* start of transparency styles */
opacity:0;
-moz-opacity:0;
filter:alpha(opacity:0);
/* end of transparency styles */
z-index:2; /* bring the real upload interactivity up front */
}
</style>




Ini script HTML-nya :

<body>
<form action="upload.php" name="send" id="send-form" class="form-style" method="POST" onsubmit="postForm('send-form');" enctype="multipart/form-data">
<div>
<a id="pick-filez" style="cursor: pointer;">SELECT FILE</a><br/>
<!-- APC_UPLOAD_PROGRESS untuk memberikan nilai uniq kepada APC, untuk menghindari penggunaan secara bersamaan -->
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<? echo uniqid();?>"/>
<input type="file" name="multi_file[]" id="realupload" class="multi realupload"/>
</div>
<input type="submit" name="upload" id="send-button" value="UPLOAD"/>
<br>
<? echo "<font color='#FF0000'>$msg</font>";?>
<div id="progress_win"></div>
</form>
</body>




Dan ini PHP-nya :

<?php
if($_SERVER['REQUEST_METHOD']=='POST') {
    $uploaddir = 'uploads_file/';
    $msg = "Tidak ada file yang di upload";
    foreach ($_FILES["multi_file"]["error"] as $key => $error)
    {
        if ($error == UPLOAD_ERR_OK)
        {
            $tmp_name = $_FILES["multi_file"]["tmp_name"][$key];
            $name = date("YmdHis").".".$_FILES["multi_file"]["name"][$key];
            $uploadfile = $uploaddir . basename($name);
            
            if(move_uploaded_file($tmp_name, $uploadfile))
            {
             $msg = "Upload MultiFile Berhasil";
            }
        }
    } 
}
else if(isset($_GET['progress_key'])) {
  $status = apc_fetch("upload_$_GET[progress_key]");
  echo json_encode($status);
  exit;
}
?>

Semua script2 diatas di jadiin satu file, dan bisa langsung dicoba........ untuk file lengkapnya bisa lihat yg ini. Simple bukan ?? ane jg kebetulan lagi pake fungsi ini buat bikin aplikasi mirip-mirip YouSendIt gt, ente tinggal modifikasi sesuai kebutuhan aj.




Update & Delete file video youtube dengan PHP

Setelah kita berhasil upload video langsung ke youtube melalui website kita, selanjutnya bagaimana caranya untuk mengubah atau menghapus file yang bersangkutan. Langkah awalnya sama dengan postingan ane sebelumnya, bagaimana cara upload file video ke youtube. Konfigurasi awalnya pun juga sama, yg beda hanya bagian prosesnya saja.

Berikut adalah script untuk mengubah / update :

<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 

$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
              $username = 'youremail@mail.com',
              $password = 'yourpassword',
              $service = 'youtube',
              $client = null,
              $source = 'MazhtersSource', // untuk identifikasi aplikasi kita
              $loginToken = null,
              $loginCaptcha = null,
              $authenticationURL);


$developerKey = 'developerKey';
$applicationId = 'Test Upload Video';
$clientId = 'Test Upload Video Client';

$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);

$videoEntry = new Zend_Gdata_YouTube_VideoEntry();


$feed = $yt->getVideoFeed('http://gdata.youtube.com/feeds/users/default/uploads');
foreach($feed as $entry) 
{
if($entry->getVideoId() == $video_id)
{
$videoEntry = $entry;
$videoEntry->setVideoTitle('ini title yg baru');
                $videoEntry->setVideoDescription('ini description yg baru');
                $putUrl = $videoEntry->getEditLink()->getHref();



                $yt->updateEntry($videoEntry, $putUrl);
                break;
}
}


echo "Update File Video Sukses";


?>

Sedangkan untuk menghapus / delete bisa menggunakan script berikut :


<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 

$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
              $username = 'youremail@mail.com',
              $password = 'yourpassword',
              $service = 'youtube',
              $client = null,
              $source = 'MazhtersSource', // untuk identifikasi aplikasi kita
              $loginToken = null,
              $loginCaptcha = null,
              $authenticationURL);

$developerKey = 'developerKey';
$applicationId = 'Test Upload Video';
$clientId = 'Test Upload Video Client';

$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);

$videoEntry = new Zend_Gdata_YouTube_VideoEntry();

$feed = $yt->getVideoFeed('http://gdata.youtube.com/feeds/users/default/uploads');




$videoEntryToDelete = null;

foreach($feed as $entry) 
{
if ($entry->getVideoId() == $file_media)
{
$videoEntryToDelete = $entry;
                $yt->delete($videoEntryToDelete);
break;
}
}

echo "Delete File Video Sukses";


?>

Script2 diatas ane berasumsi bahwa file berhasil di update atau di delete, ente-ente bisa memodifikasi dengan menambahkan pesan error apabila file gagal terupdate / terdelete.

Upload video ke Youtube dengan PHP

Wah2 udah 2 bulan lebih nggak nulis blog nih, coz kerjaan yg super duper padat dan ga bisa ditinggalkan. Mumpung skrg lg rada longgar, dan kebetulan juga baru aj dapet ilmu baru, wajib hukumnya untuk berbagi dengan ente-ente semua.

Sesuai dengan judulnya, mengupload video dari website kita langsung ke youtube kayaknya lg trend bgt nih, di lihat dari berbagai sudut pandang, banyak keuntungan yg didapet. Yang paling mendasar adalah space di hosting kita, tentunya kita tidak perlu menyiapkan space lebih untuk menyimpan file video. Yang  kedua adalah video yg kita upload lebih besar kemungkinannya untuk dilihat oleh khalayak banyak, sepertinya ga perlu ane dijelasin lg apa alasannya.

Dalam membuat engine ini, tutorial lengkapnya bisa dilihat di sumbernya langsung, tp disini ane akan coba jelaskan menggunakan bahasa kita yang mungkin akan mudah dimengerti.

Syarat utama adalah kita mesti punya account youtube dan account google dengan menggunakan email yg sama (tidak harus menggunakan gmail, bisa apa aj) sebab nanti kita harus mendapatkan DeveloperKey melalui account di google, ente bisa masuk kesini buat dapetin DeveloperKey.

Kedua yg harus diperhatikan adalah bahwa engine ini hanya bisa running dengan menggunakan PHP >= 5.1.3, jadi yg masih pake versi PHP dibawah itu, buru-buru di upgrade deh. Kita juga harus menyiapkan Zend_Gdata >= 1.7.7. yg bisa diunduh di sini. Langkah selanjutnya buka file php.ini dan bagian extension=php_openssl.dll di hapus titik komanya ( ; ). Kemudian tambahkan juga include_path=".:/user/local/lib/php:/path/to/ZendGData/library, jika masih di localhost, bagian terakhir ini bisa diabaikan.

Setelah persiapan selesai, kita tinggal menggunakan script berikut untuk memulainya.


<?php
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 


$authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
              $username = 'youremail@mail.com',
              $password = 'yourpassword',
              $service = 'youtube',
              $client = null,
              $source = 'MazhtersSource', // untuk identifikasi aplikasi kita
              $loginToken = null,
              $loginCaptcha = null,
              $authenticationURL);


$developerKey = 'developerKey';
$applicationId = 'Test Upload Video';
$clientId = 'Test Upload Video Client';


$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);


// create a new VideoEntry object
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle('ini title videonya');


$myVideoEntry->setVideoDescription('ini descripsi videonya');
// The category must be a valid YouTube category!
$myVideoEntry->setVideoCategory('ini categorinya');


// Set keywords. Please note that this must be a comma-separated string
// and that individual keywords cannot contain whitespace
$myVideoEntry->SetVideoTags('ini tag videonya'); // biar gampang dicari


$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
//$postUrl = $tokenArray['url'];


$nextUrl = 'www.mazhters.com'; // url setelah sukses upload video


// build the form
$form = '<form action="'. $postUrl .'?nexturl='. $nextUrl .
        '" method="post" enctype="multipart/form-data">'. 
        '<input name="file" type="file"/>'. 
        '<input name="token" type="hidden" value="'. $tokenValue .'"/>'.
        '<input value="Upload Video File" type="submit" />'. 
        '</form>';
echo $form;
?>


Ok guys, itu aj langkah-langkahnya, dan bisa langsung dicoba upload vidoenya.