fgetcsv hanya membaca baris pertama file CSV? ini solusinya!

Bismillaahirrohmaanirrohiim…

Berikut ini script php untuk membaca file CSV:

<?php
$file_csv = isset($_FILES['file_csv']) ? $_FILES['file_csv'] : array();

$namafile = isset($file_csv['name']) ? $file_csv['name'] : '';//namafile.csv
$separator = isset($_POST['separator']) ? $_POST['separator'] : ',';

if (empty($namafile)) {
  exit('File upload tidak ditemukan');
}

$nama_temp = $file_csv['tmp_name'];

$rev = strrev($namafile);
if (substr(strtolower($rev), 0,3)!=='vsc') {
  @unlink($nama_temp);

  exit('File upload bukan CSV ('.$namafile.')');
}


// tentukan lokasi file yang akan disimpan
$dirupload = dirname(__FILE__).'/upload/';
$tujuanupload = $dirupload.$namafile;

// pindahkan file
$terupload = move_uploaded_file($nama_temp, $tujuanupload);

if (!$terupload) {
  @unlink($nama_temp);
  exit('Gagal upload file ('.$namafile.')');
}


$arr_xls = array();

//cari akhir baris csv
while(!feof($file)) {
  //baca isi csv perbaris dengan separator koma atau titik koma
  $data = fgetcsv($file,0, $separator); 
  if (!is_array($data)) continue;

  $jumkolom = count($data);

  for($i=0;$i<$jumkolom;$i++) {
    echo $data[$i];
    echo '<br />';
  }
  echo '<hr />';
}

//tutup akses file csv
fclose($file); 


Untuk tipe CSV seperti ini:

1,Sandal,7.500,
2,Sepatu,7.500,
3,Baju,7.500,

disimpan dari libreoffice tidak ada masalah, namun jika disimpan dari excel dengan format seperti di bawah ini:

1,Sandal,"7,500",,, 
2,Sepatu,"7,500",,,
3,Baju,"7,500",,,

maka yang akan terbaca hanya satu baris pertama yang berisi seluruh isi CSV.

hal ini tentu menyulitkan saat ingin mengolah data CSV, solusinya adalah dengan menambahkan kode dipaling atas:

ini_set('auto_detect_line_endings', true);

Dalam server windows, linux, atau mac, tentu mempunyai format ganti baris yang berbeda-beda, jadi di PHP harus di set deteksi ganti barisnya menjadi OTOMATIS.

Demikian, semoga bermanfaat.

 

Bagikan

You May Also Like

About the Author: rasupe

Leave a Reply

Your email address will not be published. Required fields are marked *