Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Belajar PHP: Upload dokumen dan file ke Dropbox

Posted on July 14, 2013

Dropbox adalah solusi penyimpanan dokumen dan file online lintas perangkat dengan satu akun, sehingga pemilik akun dapat mengakses file-file diberbagai perangkat PC, notebook, netbook, iPad, mobile dll. Dropbox sendiri sudah menyediakan aplikasi-aplikasi bawaan khusus untuk perangkat yang akan digunakan.

Bagaimana jika kita ingin mencadangkan sebuah file/dokumen dalam server kita ke akun dropbox dengan aplikasi berbasis PHP? Caranya mudah, Dropbox telah menyediakan PHP DropboxUploader.

Untuk menggunakannya, contoh:

[sourcecode language=”php”]
require ‘DropboxUploader.php’;

$uploader = new DropboxUploader(’email.address.used.to.log.in.to.dropbox@example.com’, ‘dropbox-password’);
$uploader->upload(‘file-to-be-uploaded’, ‘destination-folder-in-dropbox’);
[/sourcecode]

Sedangkan berkas Dropbox Uploader sendiri sebagai berikut:
[sourcecode language=”php”]

<?php
/**
* Dropbox Uploader
*
* Copyright (c) 2009 Jaka Jancar
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
* @author Jaka Jancar [jaka@kubje.org] [http://jaka.kubje.org/]
* @version 1.1.5
*/
class DropboxUploader {
protected $email;
protected $password;
protected $caCertSourceType = self::CACERT_SOURCE_SYSTEM;
const CACERT_SOURCE_SYSTEM = 0;
const CACERT_SOURCE_FILE = 1;
const CACERT_SOURCE_DIR = 2;
protected $caCertSource;
protected $loggedIn = false;
protected $cookies = array();

/**
* Constructor
*
* @param string $email
* @param string|null $password
*/
public function __construct($email, $password) {
// Check requirements
if (!extension_loaded(‘curl’))
throw new Exception(‘DropboxUploader requires the cURL extension.’);

$this->email = $email;
$this->password = $password;
}

public function setCaCertificateFile($file)
{
$this->caCertSourceType = self::CACERT_SOURCE_FILE;
$this->caCertSource = $file;
}

public function setCaCertificateDir($dir)
{
$this->caCertSourceType = self::CACERT_SOURCE_DIR;
$this->caCertSource = $dir;
}

public function upload($filename, $remoteDir=’/’) {
if (!file_exists($filename) or !is_file($filename) or !is_readable($filename))
throw new Exception("File ‘$filename’ does not exist or is not readable.");

if (!is_string($remoteDir))
throw new Exception("Remote directory must be a string, is ".gettype($remoteDir)." instead.");

if (!$this->loggedIn)
$this->login();

$data = $this->request(‘https://www.dropbox.com/home’);
$token = $this->extractToken($data, ‘https://dl-web.dropbox.com/upload’);

$data = $this->request(‘https://dl-web.dropbox.com/upload’, true, array(‘plain’=>’yes’, ‘file’=>’@’.$filename, ‘dest’=>$remoteDir, ‘t’=>$token));
if (strpos($data, ‘HTTP/1.1 302 FOUND’) === false)
throw new Exception(‘Upload failed!’);
}

protected function login() {
$data = $this->request(‘https://www.dropbox.com/login’);
$token = $this->extractToken($data, ‘/login’);

$data = $this->request(‘https://www.dropbox.com/login’, true, array(‘login_email’=>$this->email, ‘login_password’=>$this->password, ‘t’=>$token));

if (stripos($data, ‘location: /home’) === false)
throw new Exception(‘Login unsuccessful.’);

$this->loggedIn = true;
}

protected function request($url, $post=false, $postData=array()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
switch ($this->caCertSourceType) {
case self::CACERT_SOURCE_FILE:
curl_setopt($ch, CURLOPT_CAINFO, $this->caCertSource);
break;
case self::CACERT_SOURCE_DIR:
curl_setopt($ch, CURLOPT_CAPATH, $this->caCertSource);
break;
}
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($post) {
curl_setopt($ch, CURLOPT_POST, $post);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}

// Send cookies
$rawCookies = array();
foreach ($this->cookies as $k=>$v)
$rawCookies[] = "$k=$v";
$rawCookies = implode(‘;’, $rawCookies);
curl_setopt($ch, CURLOPT_COOKIE, $rawCookies);

$data = curl_exec($ch);

if ($data === false)
throw new Exception(‘Cannot execute request: ‘.curl_error($ch));

// Store received cookies
preg_match_all(‘/Set-Cookie: ([^=]+)=(.*?);/i’, $data, $matches, PREG_SET_ORDER);
foreach ($matches as $match)
$this->cookies[$match[1]] = $match[2];

curl_close($ch);

return $data;
}

protected function extractToken($html, $formAction) {
if (!preg_match(‘/<form [^>]*’.preg_quote($formAction, ‘/’).'[^>]*>.*?(<input [^>]*name="t" [^>]*value="(.*?)"[^>]*>).*?<\/form>/is’, $html, $matches) || !isset($matches[2]))
throw new Exception("Cannot extract token! (form action=$formAction)");
return $matches[2];
}

}

[/sourcecode]

atau Unduh dari file berikut DropboxUploader.php (klik kanan save-as)

Terbaru

  • Berapa Lama Verifikasi Dana Premium? Jangan Panik, Ini Penjelasannya!
  • NotebookLM Sekarang Bisa Kustomisasi Slide Presentasi Secara Dinamis
  • Review Lengkap Headset SteelSeries Arctis Nova Elite
  • Cara Cek Bansos Atensi YAPI 2026 dan Jadwal Cairnya!
  • Kenapa 2026 Bakal Jadi Tahun Kejayaan Gaming di Linux? Ini Jawabannya
  • Download Upload DNS dan SPTJM SD-SMP untuk Administrasi TKA 2026
  • Kenapa Disney Matikan Dolby Vision dan HDR10? Ini Penjelasannya
  • Kenapa Bobon Santoso Pensiun Dari Youtube? Ini Alasan Sebenarnya
  • Apakah Bootcamp Hacktiv8 Penipu atau Direkomendasikan?
  • Inilah Estimasi Waktu Pencairan TPG 2026 Sehabis SKTP Muncul di Info GTK
  • Cara Menggunakan openClaw untuk Kebutuhan SEO
  • Apakah Tunjangan Profesi Guru Hangus Karena SKTP Belum Terbit?
  • Cara Tarik Saldo PNM Digi ke Rekening & Daftar: Panduan Lengkap & Terbaru!
  • Apa itu Penipuan Michat Hotel?
  • Yang Baru di Claude 5 Sonnet
  • Tip Jadi Kreator di Pinterest Tahun 2026
  • Cara Jualan Produk Digital Tanpa Harus Capek Promosi Terus-Menerus
  • Rangkuman Strategi Bisnis Baru dari CEO Youtube 2026, Wajib Dibaca Kreator Nih
  • Apa itu Platform WeVerse? Ini Penjelasan Lengkapnya
  • Inilah Cara Mendapatkan 1000 Subscriber Cuma dalam 3 Hari Tanpa Edit Video Sama Sekali
  • Apa itu Shibal Annyeong yang Viral TikTok?
  • Apakah iPhone Inter Aman?
  • Kenapa Gemini AI Bisa Error Saat Membuat Gambar? Ini Penjelasannya!
  • Daftar Akun Moonton via Web Tanpa Aplikasi untuk MLBB
  • Cara Hapus Akun Terabox: Panduan Lengkap dan Aman
  • Khaby Lame’s $957M Digital Identity Deal Explained
  • Cek HP Anak, Apakah Ada Video Viral Cukur Kumis Bawah
  • Jika ATM Terpelanting, Apakah Saldo Aman?
  • Inilah 5 Rekomendasi Smartwatch Terbaik di Bawah Rp1 Jutaan
  • Siapa Daud Tony yang Ramal Jatuhnya Saham & Harga Emas-Perak?
  • How to Fix Microsoft 365 License Errors 29 & 44 with Simple Steps
  • KDE Linux Nears Beta with 62% Progress, What’s Next?
  • PeaZip 10.9 Released, This is The New Feature
  • Wine 11.2 Released with Faster Debugging and 32-Bit Fixes for Linux Users
  • Microsoft Release Litebox: A Secure Library OS for Developers
  • Cara Membuat Knowledge Base Audit untuk Claude Project Agar Dokumen Kalian Nggak Berantakan
  • Cara Ubah Role Definition Menjadi Custom Instructions yang Efektif buat Claude Project
  • Cara Mendefinisikan Role Project Claude Agar Hasilnya Lebih Akurat dan Konsisten
  • Cara Buat AI Asisten Pribadi dengan Teknik RAG
  • Cara Membuat Podcast dari PDF dengan NotebookLlama dan Groq
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2026 emka.web.id | Design: Newspaperly WordPress Theme