Pernahkah Anda merasa pusing mengurus sinkronisasi file antar server? Proses manual sering kali bikin frustrasi. Selain itu, proses ini juga menyita waktu. Tenang, dengan PHP dan pustaka phpseclib, Anda bisa menyinkronkan file secara otomatis dan aman menggunakan SFTP. Oleh karena itu, tutorial seru ini akan memandu Anda langkah demi langkah.
Mengapa SFTP dan phpseclib Jadi Pilihan Juara?
SFTP (Secure File Transfer Protocol) adalah solusi transfer file yang super aman. Data dienkripsi selama proses. Oleh karena itu, SFTP lebih unggul dibandingkan FTP yang rentan.
Selain itu, phpseclib adalah pustaka PHP yang keren. Anda bisa menggunakan SFTP tanpa ekstensi tambahan. Bahkan, Anda tidak perlu repot dengan fungsi exec() yang riskan.
Langkah 1: Pasang phpseclib dengan Mudah
Untuk memulai petualangan ini, Anda perlu menginstal phpseclib via Composer. Buka terminal dan ketik perintah berikut:
Catatan Penting: Pastikan server Anda menggunakan PHP versi 7.0 ke atas agar phpseclib berjalan mulus.
composer require phpseclib/phpseclib
Selesai! Sekarang Anda siap untuk langkah berikutnya.
Langkah 2: Skrip PHP untuk Sinkronisasi File yang Gampang
Berikut adalah skrip PHP lengkap yang akan menyinkronkan file dari direktori lokal ke server remote via SFTP. Skrip ini dirancang sederhana tapi cerdas—hanya file yang baru atau diubah yang akan diunggah, jadi hemat waktu dan bandwidth!
<?php
/**
* Author: Moh Aly Shodiqin
* Email: [email protected]
* Url: https://solusiweb.net
*/
require 'vendor/autoload.php';
use phpseclib3\Net\SFTP;
// Konfigurasi server
$remote_user = 'username'; // Ganti dengan username server remote
$remote_host = 'remote.server.com'; // Ganti dengan hostname atau IP server
$remote_dir = '/path/to/remote/dir'; // Direktori tujuan di server remote
$local_dir = '/path/to/local/dir'; // Direktori sumber di server lokal
$remote_password = 'password'; // Ganti dengan password (lebih aman pakai kunci SSH)
// Fungsi utama untuk sinkronisasi file
function syncFiles($local_dir, $remote_user, $remote_password, $remote_host, $remote_dir) {
// Inisiasi koneksi SFTP
$sftp = new SFTP($remote_host);
// Cek login ke server remote
if (!$sftp->login($remote_user, $remote_password)) {
exit('Gagal login SFTP. Cek kredensial Anda!');
}
// Fungsi rekursif untuk unggah file dan direktori
function uploadDirectory($sftp, $local_dir, $remote_dir) {
if (!is_dir($local_dir)) {
exit('Direktori lokal tidak ditemukan. Periksa path-nya!');
}
// Buat direktori di server remote jika belum ada
$sftp->mkdir($remote_dir, -1, true);
$files = scandir($local_dir);
foreach ($files as $file) {
if ($file != "." && $file != "..") {
$local_file = $local_dir . '/' . $file;
$remote_file = $remote_dir . '/' . $file;
if (is_dir($local_file)) {
// Rekursif untuk direktori
uploadDirectory($sftp, $local_file, $remote_file);
} else {
// Cek waktu modifikasi file
$remote_mtime = $sftp->file_exists($remote_file) ? $sftp->mtime($remote_file) : 0;
$local_mtime = filemtime($local_file);
if ($local_mtime > $remote_mtime) {
echo "Mengunggah: $local_file ke $remote_file\n";
$sftp->put($remote_file, $local_file, SFTP::SOURCE_LOCAL_FILE);
}
}
}
}
}
// Jalankan proses unggah
uploadDirectory($sftp, $local_dir, $remote_dir);
echo "Sinkronisasi selesai! File Anda sudah up-to-date.\n";
}
// Eksekusi sinkronisasi
syncFiles($local_dir, $remote_user, $remote_password, $remote_host, $remote_dir);
?>Apa Sih Hebatnya Skrip Ini?
Skrip ini punya banyak keunggulan. Berikut penjelasannya:
- Impor phpseclib: Baris require ‘vendor/autoload.php’; dan use phpseclib3\Net\SFTP; memuat pustaka SFTP.
- Konfigurasi Mudah: Atur remote_user, remote_host, dan lainnya. Selain itu, gunakan kunci SSH untuk keamanan ekstra.
- Fungsi Cerdas: Fungsi syncFiles membuat koneksi SFTP. Selanjutnya, fungsi uploadDirectory menangani file secara rekursif.
- Efisiensi Tinggi: Skrip hanya mengunggah file yang berubah berdasarkan waktu modifikasi (mtime).
- Notifikasi Jelas: Anda akan melihat pesan seperti “Mengunggah file…” atau “Sinkronisasi selesai!”.
Tips Pro untuk Sukses
- Gunakan Kunci SSH: Password boleh, tetapi kunci SSH lebih aman untuk SFTP.
- Tes Lokal Dulu: Sebelum ke server produksi, coba skrip ini di lingkungan lokal.
- Jadwalkan dengan Cron: Selanjutnya, tambahkan ke cron job untuk sinkronisasi otomatis.
Kesimpulan: Sinkronisasi Tanpa Drama
Skrip PHP ini membuat sinkronisasi file jadi mudah dan aman. Anda tidak perlu exec() yang bikin was-was. Selain itu, hanya file yang diubah yang diunggah, sehingga hemat waktu.





