[ php ] 기본 파일 처리 (저장, 불러오기, 쓰기, 읽기, 닫기) //fopen, fwrite, fclose, feof,…
작성일 18-09-30 17:38
페이지 정보
작성자 웹지기 조회 11,514회 댓글 0건본문
******************************************************
PHP의 파일 처리 기법
******************************************************
우선 아래와 같은 주문 폼을 작성 하였다.
[code]
<form action = "orderprocess.php" method="post">
<table border="0">
<tr bgcolor="#cccccc">
<td width="150">Item</td>
<td width="15">Quantity</td>
</tr>
<tr>
<td>Tires</td>
<td align="center"><input type="text" name="tireqty" size="3" maxlength="3"></td>
</tr>
<tr>
<td>oil</td>
<td align="center"><input type="text" name="oilqty" size="3" maxlength="3"></td>
</tr>
<tr>
<td>Spark Plug</td>
<td align ="center"><input type="text" name="sparkqty" size="3" maxlength="3"></td>
</tr>
<tr>
<td>Shipping Address</td>
<td align ="center"><input type="text" name="address" size="20" maxlength="20"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Submit order"></td>
</tr>
</table>
</form>
[/code]
<실제 브라우저 화면>
그리고 폼에서 받은 값을 보낼 orderprocess.php 문서도 작성했다. 나중에 봤을 때 쉽게 이해
할 수 있도록..코딩과 설명을 함께 적어 놓는 것이 좋을 것 같다.
[code]
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
//웹 문서 트리의 루트를 가리킨다. 짧은 스타일로 쓰기 위해서 $DOCUMENT_ROOT 변수를 사용했다.
$tireqty = $_POST['tireqty'];
$oilqty = $_POST['oilqty'];
$sparkqty = $_POST['sparkqty'];
$address = $_POST['address'];
//위에 4개의 변수 선언은 폼에서 입력된 값에 대하여 Method에 따라 POST로 접근 했다.
$date = date('H:i, js F Y');
//날짜를 알려주는 함수이다.
echo "<p>Order processed at";
echo $date;
echo "</p>";
echo'<p>Your order is as follodws:</p>';
echo $tireqty.' tires<br>';
echo $oilqty.' bottles of oil<br>';
echo $sparkqty.' spark plugs<br>';
$totalqty = 0;
$totalqty = $tireqty + $oilqty + $sparkqty;
if($totalqty ==0) {
echo "<br>You did not order anything on the previous page!<br>";
exit;
//if문의 조건이 만족하면 {}안에 내용이 표시되고 exit로 인해 모든 php문이 종료된다.
}
echo "Item ordered: ".$totalqty."<br>";
echo "address: ".$address."<br>";
$totalamount = 0.00;
define('TIREPRICE',100);
define('OILPRICE',10);
define('SPARKPRICE',4);
//상수 선언(상수:변하지 않는 값)
$totalamount = $tireqty * TIREPRICE + $oilqty * OILPRICE + $sparkqty * SPARKPRICE;
echo "Subtoal: $".number_format($tatalamount,3)."<br>";
$taxrate = 0.00;
$totalamount = $totalamount *(1 + $taxrate);
echo "Total including tax : $".number_format($totalamount,2)."<br><br>";
//number_format() 함수를 사용하여 총합을 소수점 이하 두자리 숫자로 표현하여 보았다.
$outputstring = $date." ".$tireqty." tires ".$oilqty." oil ".$sparkqty." spark plugs $".$totalamount." ". $address." ";
$fp = fopen('$DOCUMENT_ROOT/../files/shippingaddress.txt','a');
//fopen()을 호출할 때에는 두개,세개나 네개의 파라미터를 넘겨준다. 자세한 설명은 예제 밖에..
if(!$fp) {
echo "<p><strong>Your order could not be processed at this time.
please try again later.</strong></p></body></html>";
exit;
}
fwrite($fp,$outputstring,strlen($outputstring));
//파일에 입력하기. 자세한 설명은 예제 밖에..
fclose($fp);
?>
[/code]
<실제 브라우저 화면>
위 예제에서 가장 중점을 두고 공부한 부분은 바로 데이터를 불러오고 저장하는 기능이다.
바로 fopen과 fwrite라고 할 수 있다.
(1)fopen()
$fp = fopen('$DOCUMENT_ROOT/../files/shippingaddress.txt','a');
전체적인 뜻은 fopen()이 파일을 열었다면 파일 포인터를 리턴받아 $fp변수에 저장한다. 이후에 파일에 접근하기 위해서 $fp를 사용한다.
첫번째 파라미터는 열려고 하는 파일의 이름과 경로를 함께 적어준다.
$DOCUMENT_ROOT라는 짧은 스타일의 이름을 쓰기 위해 예제 상단에 $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 와 같이 짧은 스타일로 선언을 하였다.
$_SERVER['DOCUMENT_ROOT'];란 현재 사이트가 위치한 서버상의 위치를 나타낸다.
두번째 파라미터는 파일모드를 저장한 문자열을 넘겨준다. fopen에서 사용하는 파일 모드는 다음 링크
된 사이트를 참고 하자.
<참고 사이트: http://kr.php.net/manual/kr/function.fopen.php>
(2)fwrite()
fwrite($fp,$outputstring,strlen($outputstring));
쉽게 첫번째,두번째 파라미터는 $outputstring에 저장된 문자열을 $fp가 가리키는 파일에 쓴다고
할 수 있다.
그리고 세번째 파라미터는 옵션인데 위와 같은 경우는 문자열의 길이를 알아내는 strlen함수를
사용 하였다.
(3) fclose()
파일 사용이 끝났으면 파일을 닫아야 한다.
이제 주문이 잘 들어갔는지 주문을 읽어보아야 한다.
주문 파일을 쉽게 읽도록 웹 인터페이스를 만들어 보았다.
[code]
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<body>
<h1>Bob's Auto Parts</h1>
<h2>Customer Order</h2>
<?php
$fp= fopen('$DOCUMENT_ROOT/../files/shippingaddress.txt','r');
if(!$fp){
echo "<p><strong>No orders pending.please try again later.</strong></p>";
exit;
}
while(!feof($fp)){
$order=fgets($fp,999);
echo $order."<br>";
}
?>
</body>
[/code]
위 소스에 대한 몇가지 새로운 함수들을 살펴 보자.
(1)feof()
파일의 끝인지 검사한다. feof()함수는 파일 포인터를 인자로 받는다. 만약 파일 포인터가 파일의 끝에
닿았으면 true를 리턴한다. 이 함수는 File End Of File이란 뜻이다.
(2)fgets()
파일에서 한 줄씩 읽는다. 줄바꿈 문자를 만나거나 EOF를 만나거나 혹은 파일에서 988바이트를 읽을
때까지 진행한다. 왜 988바이트인가 하면 $order=fgets($fp,999);에 있는 두번째 파라미터인 999는
읽을 수 있는 최대 길이는 "명시한 길이 -1"바이트 라는 뜻이다. 그리고 한줄 씩 읽은 문자열을
$order변수에 저장한다.
fgets()함수에 s를 하나 더 붙여 fgetss()로 사용하면 문자열에 저장된 특정 태그를 모두 제거 할 수
있다.
##한번에 파일 전체 읽기##
(1) readfile()
이 함수는 파일을 열어서 파일의 내용을 모두 표준 출력(브라우저)으로 출력한 다음에 파일을 닫는다.
예) readfile("$DOCUMENT_ROOT/../files/shippingaddress.txt");
(2)fpassthru()
일단 fopen()으로 파일을 연 다음 fpassthru()에 파일 포인터를 넘겨 주면 포인터의 위치에서 파일의
끝까지 읽어서 표준 출력으로 출력한다. 그 후에 파일을 닫는다.
예)fp=fopen('DOCUMENT_ROOT/../files/shippingaddress.txt','r');
fpassthru($fp);
(3)file()
전체 파일을 읽어 온다. file()은 readfile()과 거의 유사 하지만 읽은 파일 내용을 출력하지 않고 배열
에 저장한다. 저장된 파일의 한줄 한줄이 배열의 한 요소가 된다.
(4)file_get_contents()
이 함수는 readfile()과 동일하지만 브라우저에 출력하지 않고 파일의 내용을 문자열로 리턴한다.
추천0
비추천 0
댓글목록
등록된 댓글이 없습니다.