YOUTUBE CACHING WITH SQUID + APACHE1.3 + PHP5.2

Artikel asli dicomot dari : http://www.mieorganik.com/youtube_ca...apache_php.pdf

Squid sudah banyak dikenal sebagai aplikasi yang sangat membantu dalam mengakselerasi browsing di internet. Tapi
ternyata squid bisa juga digunakan untuk melakukan cache untuk dynamic content. Caranya adalah meng-combo-nya
dengan menggunakan apache dan php5.

Sebenarnya selain menggunakan apache, ada juga teknik lain menggunakan NGINX dan RUBY script untuk melakukan proses
cache youtube (http://www.mieorganik.com/squidtube.html). Tapi teknik ini kurang direkomendasikan untuk mereka yang
memiliki bandwidth terbatas. Karena dengan nginx, akan ada background download yang akan menguras bandwidth anda.
Sementara dengan apache+php ini, kita hanya akan menyimpan youtube video yang sudah terbuka sempurna. Dan apabila
user menghentikannya, proses download akan berhenti dengan sendirinya.
OK…let’s get start

REQUIREMENT
1. Squid 2.7 – 3.1 / Lusca
2. Apache + PHP5
Saya mengasumsikan anda sudah berhasil menginstal APACHE+PHP5 ya..apabila belum pernah menginstall silahkan merujuk
ke link dibawah ini atau bisa searching secara mandiri via google dengan keyword “how to install apache php”.

http://www.lamphowto.com/
http://www.freebsdmadeeasy.com/tutor...eb-hosting.php

INSTALASI :
1. Sisipkan parameter dibawah ini di squid.conf anda :
Code:
acl youtube2 dstdomain .youtube.com
# #(lokasi phpredir menyesuaikan)
url_rewrite_program /usr/local/etc/squid/phpredir.php
url_rewrite_access allow youtube2
url_rewrite_access deny all
redirector_bypass on
2. Buatlah file phpredir.php (edit parameternya)
kemudian ubah permissionnya : chmod 777 phpredir.php
Code:
#!/usr/local/bin/php
<?php
while ( $input = fgets(STDIN) ) {
// Split the output (space delimited) from squid into an array.
$input=explode(" ",$input);
if(preg_match("@youtube@",$input[0])){
$input[0]=urlencode($input[0]);
$input= implode(" ",$input);
echo "http://ip.address/per.php?url=$input"; //URL of my web server
}else
echo ""; // empty line means no re-write by Squid.
}
?>
3. Buatlah file per.php (dan simpan di webroot apache ubah parameter yang di BOLD menjadi webroot di folder
apache)
kemudian ubah permissionnya : chmod 777 per.php
Code:
<?php
$file_path="/usr/local/www/youtube";
$logfile="$file_path/cache.log";
$url=urldecode($_GET['url']);
$urlptr=fopen($_GET['url'],"r");
$blocksize=32*1024;
//attempt to get. a 404 shouldn't happen, but...
if($urlptr===FALSE){
header("Status: 404 Not Found");
die();
}
//find content type and length
foreach($http_response_header as $line){
if(substr_compare($line,'Content-Type',0,12,true)==0)
$content_type=$line;
else if(substr_compare($line,'Content-Length',0,14,true)==0){
$content_length=$line;
}
}
if(!preg_match("@.*youtube.*videoplayback.*@",$url)){
fpassthru($urlptr);
fclose($urlptr);
exit(0);
}
//send content type and length
header($content_type);
header($content_length);
//find youtube id;
$url_exploded=explode('&',$url);
$id="";
foreach($url_exploded as $line){
if(substr($line,0,3)==='id=')
$id=substr($line,3);
}
//Get the supposed file size
$length=intval(substr($content_length,16));
file_put_contents($logfile,"\nFound id=$id, content-type: $content_type contentlength=$
content_length\n",FILE_APPEND);
//Do we have it? delivar if we do
$fname="$file_path/$id-$length";
//Check if we have the file, and it is the correct size. incorrect size implies corruption
if(file_exists($fname) &&filesize($fname)==$length){
// if(file_exists($fname)) {
readfile($fname);
logdata("HIT",$url,$fname);
exit(0);
}
//file not in cache? Get it, send it & save it
logdata("MISS",$url,$fname);
$fileptr=fopen($fname,"w");
while(!feof($urlptr)){
$line=fread($urlptr,$blocksize);
echo $line;
if($fileptr) fwrite($fileptr,$line);
}
fclose($urlptr);
if($fileptr) fclose($fileptr);
function logdata($type,$what, $fname){
$file_path="/usr/local/www/youtube";
$logfile="$file_path/cache.log";
$line="@ ".time()."Cache $type url: $what file: $fname client:".$_SERVER['REMOTE_ADDR']."\n";
file_put_contents($logfile,$line,FILE_APPEND);
}
?>
4. Jalankan squid. DONE!!
5. Untuk melihat apakah youtubenya jalan, lihat saja di file log yang ada di folder youtube anda. 
6. Apabila kode diatas sulit dibaca, silahkan download saja original filenya di
http://www.mieorganik.com/squidtube.tar.gz
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description
  • description

Video Gallery

  • Linux
    sekedar informasi, sekarang zimbra sudah diakuisisi oleh VMWare. jadi nantinya logo webmail zimbra kita akan ada logo VMware-nya.
  • Foto
    kalo mau buat efek foto kembar yang penting pilih minimal 3 foto (mau lebih juga terserah anda aj..)yang setingan tempat dan letak kameranya
  • Network
    setelah anda membongkar dus, dan menyiapkan koneksi. yang perlu anda lakukan adalah:
  • Serba-Serbi
    16 Cara Mengikat Sepatu Ala Jepang share buat teman2 & cew ato cow yang senang menggunakan sepatu bertali. Selamat mencoba
  • Tips-Trik
    Jika agan pengguna komputer, pasti sudah tidak asing lagi dengan yang namanya mouse. Mouse adalah salah satu pendamping setia dari komputer. Hampir semua jenis mouse memiliki 3 buah tombol. Tombol kiri, tombol kanan dan tombol scroll yang ada di tengah
  • Windows
    Windows 7 merupakan versi yang jauh lebih baik daripada versi terbaru windows, yaitu windows Vista. Dan windows 7 dilengkapi dengan banyak fitur baru.