Posted by: Furqon | February 19, 2009

Case: Upload, Validate, dan max_execution_time

Tulisan kali ini tidak secara khusus menjelaskan tiga proses yang telah disebutkan dalam judul. Kali ini gw coba berbagi satu kasus berkaitan dengan ketiganya. Kurang lebih kasus yang dihadapi adalah seperti ini:

  1. upload batch file berkestensi .txt,
  2. membaca per-baris file yang diupload, memvalidasi, dan insert ke dalam table
  3. batasan max_execution_time.

Bisakah pirsawan bayangkan gimana kalau data yang diupload itu misalnya terdiri lebih dari 100.000 baris kemudian akan kita entri ke dalam database, dengan kriteria macam-macam yang mengakibatkan setiap baris yang akan di entri ke dalam database harus divalidasi, kemudian dicatatkan log berhasil tidaknya dst.. Sangat besar kemungkinan sebelum program kita mencapai baris ke 100.000, program kita akan berhenti karena kehabisan nafas. timeout, halt, modyar.

Nah kali ini, saya mau berbagi kali aja ada yang mau nangkep. Ide besarnya adalah membagi 100.000 baris data tadi kedalam segmen-segmen kecil sehingga tiap segmen behasil dieksekusi tanpa mengakibatkan program validasi kita kehabisan nafas.

Berikut pseudocode-nya.

  1. form upload: user upload file .txt,
  2. submit: file diupload ke dalam satu folder tertentu.,
  3. segera setelah data berhasil diupload, jalankan script untuk membaca file,
    • baca panjang baris data (  while( fgets() ) $i++   )
    • tentukan jumlah baris paling aman, sehingga proses validasi tidak halt (sebut satu segmen, misal 1000 baris)
    • mulai baca  perbaris data sampai batas atas segmen
    • ketika mencapai ujung  segmen, stop pembacaan
    • kembalikan ke view (buat pesan sesuai selera) panggil fungsi untuk membaca segmen ke 2.
    • lakukan hingga program membaca baris paling akhir
  4. ketika pembacaan berakhir beri user kabar gembira, entri telah berhasil

Cara di atas menggunakan ajax sehingga proses eksekusi antar segmen bisa berlangsung. Ketika satu segmen telah selesai dibaca, lakukan eksekusi fungsi melalui ajax dengan parameter (segment, namafile dst).

Sok atuh kalo ada yang mau tanya.. dari gaya tulisnya sih.. musti banyak yang dipertanyakan.. :)

UI upload,validate

UI upload,validate


Responses

  1. Assalaamu’alaikum

    Mampir bentar :)

    Knp ga pake

    set_time_limit(0)

    aja qon di phpnya ?

  2. ‘alaikum salam warahmatullah..

    kenapa gak diset seperti itu, karena gak keliatan kerennya.. :)

    tantangannya adalah memberi user kabar bagaimana proses upload->validasi->insert
    semacem progress bar..

    klo barisnya ada 200rebu line..
    misal ada halt di awal, bisa langsung di kill.
    gitulah kurang lebih nak..

    :p


Leave a response

Your response:

Categories