2018년 5월 21일 월요일

[PHP예제] 136 CSV 파일을 읽음


read_csv.csv

,강사,과목
월요일,김철수,수학
화요일,이만수,과학
수요일,박춤,댄스
목요일,최고음,음악
금요일,구민철,사회
토요일,리차드,"영어1
영어2"
,,
,,
일요일,-,-


136.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>CSV 파일을 읽음</title>
    <link href="style.css" rel="stylesheet">
</head>
<body>
<div>
<?php
// h() 함수를 불러옴
require_once 'h.php';

// CSV 파일은 Windows의 엑셀에서 작성한 SJIS 인코드
$csvFile = './read_csv.csv';
if( !file_exists($csvFile) )
{
  die('파일이 존재하지 않음');
}

// 문자 깨짐 방지
// CSV 파일의 내용을 모두 넣음
$tempCSV = file_get_contents($csvFile);

// 문자 인코딩을 UTF-8로 변환함
$tempCSV = mb_convert_encoding($tempCSV, 'UTF-8', 'EUC-KR');

// 임시 파일에 저장함
$fp = tmpfile();
fwrite($fp, $tempCSV);

// 파일 포인터를 처음으로 되돌림
rewind($fp);

// 로케일을 설정함
setlocale(LC_ALL, 'ko_KR.UTF-8');


// 한 줄씩 읽고 표를 생성함
$html = '<table>';

while( $arr = fgetcsv($fp) )
{
  if( !array_diff($arr, array('')) )
  {
    continue;
  }

  list($day, $teacher, $subject) = $arr;

  // nl2br() 함수에서 요소 안의 줄 바꿈을 <br>로 변환함
  $html .= '<tr>'
    . '<td>' . nl2br(h($day), false) . '</td>'
    . '<td>' . nl2br(h($teacher), false) . '</td>'
    . '<td>' . nl2br(h($subject), false) . '</td>'
    . '</tr>';
}

$html .= '</table>';

// 파일의 잠금을 해제함
fflush($fp);
flock($fp, LOCK_UN);

// 파일을 닫음
fclose($fp);

// 브라우저에 출력함
echo $html;
?>
</div>
</body>
</html>




  • CSV 파일을 출력하고 싶을 때
    • fputcsv() 함수를 사용하여 배열 데이터를 CSV 파일에 기록함

댓글 없음:

댓글 쓰기