Mengupload File Berukuran Besar Dengan PHP

Difficulty Level: Novice
Prerequisite Knowledge: Uploading File With PHP

Pada tulisan kali ini, saya tidak akan membahas teknik mengupload file dengan menggunakan HTML dan PHP dari nol, sudah banyak tulisan yang menjelaskan hal itu. Yang akan saya bahas adalah bagaimana mengatasi limitasi dari pengaturan instalasi standar PHP ketika mengupload file.

Pada instalasi standar, biasanya ukuran file yang bisa dibolehkan untuk di-upload adalah 2MB, sementara limit waktu eksekusi script PHP dan limit waktu membaca input dari user biasanya terbatas maksimal masing-masing 60 dan 30 detik. Limit ini sering tidak cukup, karena saat ini semakin banyak file yang berukuran besar, selain itu, karena kecepatan upload biasanya jauh lebih rendah dari download, waktu membaca input dari user yang terbatas hanya 30 detik pun biasanya tidak cukup. Contoh: jika file yang mau di-upload berukuran 1 MB dan kecepatan upload hanya 10 kbps, maka untuk mengupload file tersebut dibutuhkan waktu 100 detik, yang mana itu telah melewati batas waktu eksekusi script untuk upload dan proses upload file dipastikan akan gagal.

Untuk mengatasi hal ini, kita tentunya harus meningkatkan ukuran file yang boleh diupload dan menambahkan limit waktu yang diizinkan untuk eksekusi script. Untuk mewujudkannya, ada 2 hal yang dapat dilakukan:

  1. Mengubah php.ini dan merestart Apache
  2. Mengubah konfigurasi PHP khusus untuk file yang menghandle upload file. Pada tulisan ini, teknik no. 2 ini lah yang akan dibahas

Untuk mengubah konfigurasi PHP pada file-file yang menghandle proses upload, cukup tambahkan 4 baris berikut di baris paling atas (bahkan di atas include, require, dll):

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 600);
ini_set('max_execution_time', 600);

Penjelasan: 2 baris pertama di atas bertujuan untuk meningkatkan ukuran file yang bisa di-upload, pada contoh ini misalnya saya tingkatkan menjadi 10 MB. 2 baris terakhir bertujuan untuk meningkatkan limit waktu untuk membaca input dan mengeksekusi script menjadi 600 detik. Silakan ganti-ganti nilai parameter di atas sesuai kebutuhan. Script di atas sudah saya coba dan sukses dengan baik.

Tambahan: hasil baca-baca di internet, teknik di atas mungkin tidak berfungsi jika ukuran file yang di-uploadnya sudah berorde GB. Jika aplikasi berbasis PHP yang dibangun harus mampu menerima upload file dalam orde GB keatas, gunakan teknik lain (tapi saya belum tahu teknik lainnya apa waktu nulis ini :P)

6 thoughts on “Mengupload File Berukuran Besar Dengan PHP

  1. ditempaku, kalo filenya dah gede, kita memakai java mas. spesaial case sih memang, tapi akhirnya jadi solusi permanen…

    awalnya kita memang pakai php, tetapi karena jenis filenya adalah rawan dengan kevalidan dan keutuhan data yang diupload, maka kita pakai yang namanya MQ = Message Queue..

    Jadi ada satu Messaging Server : JMS yang bertugas menerima dan meneruskan file hasil upload untuk diolah lanjut apakah disimpan atau diteruskan ke server lain

    Kemudian di sisi user dibuatkan sebuah aplikasi kecil yang akan terhubung dengan JMS. Nah protokol yang digunakan antara client dengan JMS bukan menggunakan http, tetapi AVMQ (advanced messaging queue)

    Keuntungannya adalah misal kita upload file 4 gb, dari client file akan dipecah-pecah menjadi misal 512kb, nah per 512 kb ini file akan dikirim ke JMS. Kemudian si JMS akan memberikan respon finish setelah pecahan 512kb ini disatukan lagi seperti file utuh aslinya.

    Keuntungan lain adalah melalui protokol avmq ini ada proses resume file jika pada saat proses upload ada masalah seperti gangguan jaringan.

    Lagi, ada proses verifikasi update kesamaan antara file sumber dengan file hasil upload di server JMS.

    #sekedar sharing …

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s