About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • PHP
  • /
  • Implementasi CURL untuk Download File di PHP
PHP

Implementasi CURL untuk Download File di PHP

Penerapan cURL (client URL) seringkali digunakan untuk mendapatkan atau mengirim data dari/ke sebuah situs dengan URL tertentu, baik dengan cara GET maupun POST. Apakah hanya itu penerapannya? Ternyata tidak, cURL juga dapat digunakan untuk mengunduh/download file dari sebuah situs tertentu. Lebih jauh lagi, dengan kemampuan tersebut dapat dibuat sebuah robot script yang dapat secara otomatis mengunduh file-file yang diinginkan dari sebuah situs.

Pada tutorial kali ini, saya mencoba menshare pengalaman pribadi bagaimana membuat script robot dengan cURL di PHP yang digunakan untuk mengunduh ratusan file dari sebuah situs secara otomatis.

Teknik Dasar cURL di PHP untuk Mengunduh File

Di dalam PHP, biasanya sudah terdapat library cURL yang sudah bisa langsung dimanfaatkan.

Langkah-langkah dasar untuk mengunduh file dari sebuah situs dengan script PHP adalah sebagai berikut:

  1. Tentukan URL dari file yang akan dijadikan target unduhan
  2. Lakukan inisialisasi cURL
  3. Lakukan setting URL file ke dalam option di cURL
  4. Lakukan setting nama file hasil unduhan di dalam komputer
  5. Jalankan request cURL

Berdasarkan langkah di atas, kita bisa susun script PHP seperti berikut

<?php
// url target unduhan
$url = "http://...";
// inisialisasi curl handler
$ch = curl_init();
// setting option url target di curl
curl_setopt($ch, CURLOPT_URL, $url);
// setting option nama file hasil unduhan 
$filename = "...";
$fp = fopen($filename, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
// jalankan curl
curl_exec($ch);
// tutup curl
curl_close($ch);
// tutup file hasil unduhan
fclose($fp);
?>

Bagian terpenting dari script di atas adalah bagian berikut ini

$filename = "...";
$fp = fopen($filename, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);

Perintah di atas dimaksudkan untuk secara otomatis membuat file baru di komputer dengan nama $filename, yang mana file ini merupakan hasil unduhan via cURL. Apabila diinginkan nama file hasil unduhan ini sama dengan nama file aslinya, maka nilai dari variabel $filename ini bisa diisi dengan string nama file aslinya.

Adapun mode 'wb' dalam fopen() bermakna bahwa file tersebut dibuka dengan mode ‘write binary’. Pemilihan mode ‘binary’ dalam proses creating file ini dirasa lebih aman dibandingkan jika non binary.

Implementasi di Robot AutoDownload

Selanjutnya teknik di atas akan kita coba gunakan untuk mengunduh beberapa file target. Misalkan diberikan sebuah file berisi list URL file yang akan diunduh sbb:

urls.txt

http://i363.photobucket.com/albums/oo75/rosihanari/gammu01-3.jpg
http://i363.photobucket.com/albums/oo75/rosihanari/tabel-1.jpg
http://i363.photobucket.com/albums/oo75/rosihanari/fb01.jpg
http://i363.photobucket.com/albums/oo75/rosihanari/fb03.jpg
http://i363.photobucket.com/albums/oo75/rosihanari/fb02.jpg
http://i363.photobucket.com/albums/oo75/rosihanari/plot1.png
http://i363.photobucket.com/albums/oo75/rosihanari/plot2.png
http://i363.photobucket.com/albums/oo75/rosihanari/plot3.png
http://i363.photobucket.com/albums/oo75/rosihanari/paging.jpg

Selanjutnya kita akan buat sebuah script robot dalam PHP untuk mengunduh sebuah file yang ada di file urls.txt di atas.

getfile.php

<?php

// open file urls.txt
$myfile = fopen("urls.txt", "r");
// proses membaca isi file urls.txt
while(!feof($myfile)) {
	// baca baris demi baris url
	$url = fgets($myfile);

	// mengambil nama file dari url
	$split = explode("http://i363.photobucket.com/albums/oo75/rosihanari/myimages/", $url);
	$filename = $split[1];
	
	// proses unduh dengan curl
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	$fp = fopen($filename, 'wb');	
	curl_setopt($ch, CURLOPT_FILE, $fp);
	curl_exec($ch);
	curl_close($ch);
	fclose($fp);
}

// tutup file urls.txt
fclose($myfile);

?>

Pada script PHP di atas, nama file hasil unduhan disesuaikan dengan nama file aslinya dari URL. Dalam hal ini, cara paling mudah untuk mendapatkan nama filenya adalah dengan melakukan explode() dikarenakan nama URL nya sama semuanya (yang beda hanya nama filenya saja).

Dengan membuat robot autodownload di atas, akan sangat membantu proses download file apalagi jumlah file yang diunduh sangat banyak. Studi kasus di atas saya terapkan untuk mengunduh sekitar 200 an file image yang saya hostingkan di photobucket. Hal ini dilakukan karena photobucket tidak menyediakan fitur untuk download all files sekaligus, melainkan hanya tersedia fitur download per file 🙁

Sebenarnya di PHP, selain menggunakan cURL, bisa pula dibuat script unduh file dengan memanfaatkan function file_get_content(). Namun, teknik ini seringkali gagal dikarenakan adanya proteksi dari server target yang tidak membolehkan pembacaan isi file targetnya.

Semoga tutorial ini bisa bermanfaat dan silakan dikembangkan sendiri sesuai kebutuhan yang diinginkan.

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply