[ php ] 기본 파일 처리 (저장, 불러오기, 쓰기, 읽기, 닫기) //fopen, fwrite, fclose, feof, fgets, fgetss, fgetcsv, readfile, fpassthru, file, fgetc, fread, file_exists, filesize,unlink, rewind, fseek,ftell > php

본문 바로가기

사이트 내 전체검색

php

[ php ] 기본 파일 처리 (저장, 불러오기, 쓰기, 읽기, 닫기) //fopen, fwrite, fclose, feof,…

작성일 18-09-30 17:38

페이지 정보

작성자 웹지기 조회 10,640회 댓글 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]

<실제 브라우저 화면>

b1ab5adf3f70b25df0c326b687afb1a6_1538296330_2692.jpg



그리고 폼에서 받은 값을 보낼 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]

<실제 브라우저 화면>

b1ab5adf3f70b25df0c326b687afb1a6_1538296446_3361.jpg 


위 예제에서 가장 중점을 두고 공부한 부분은 바로 데이터를 불러오고 저장하는 기능이다.

바로 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

댓글목록

등록된 댓글이 없습니다.

전체 82건 3 페이지

이미지 목록

게시물 검색
Copyright © 즐거운 코딩 생활 ( funyphp ). All rights reserved.
PC 버전으로 보기