주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

PHP 입문 - 파일 처리 (쓰기), 퍼미션

광수 | 2001.10.17 00:22:53 댓글: 0 조회: 786 추천: 4
분류웹 프로그래밍 https://life.moyiza.kr/itstudy/1758807
▶ PHP 입문 - 파일 처리 (쓰기), 퍼미션

실제 프로그램을 작성하기에 앞서 알아둬야할 기본적인 문법들입니다.


이번에는 기록에 대해 간단히 알아볼까요? 아, 그 전에 알아둬야 할 사항이 있습니다.


▷ 퍼미션(Permission)

윈도우 NT나 리눅스(유닉스) 등과 같이 멀티 유저용 OS에서는 퍼미션이란 개념이
있습니다. 파일이나 디렉토리 등에 대한 소유자의 권한, 같은 그룹에 대한 권한,
타인들에 대한 권한이 그것입니다.

리눅스의 예를 들어볼까요?

[bihon@xxx public_html]$ ls -l
total 2
-rw-r--r--    1 bihon bihon      208 Aug 15 11:25 index.html
drwxr-xr-x    2 bihon bihon     4096 Aug 25 19:47 test

리눅스에서 ls -l 명령을 실행하면 위와 비슷한 리스트가 출력됩니다.

앞에 drwxr-xr-x, -rw-r--r-- 등의 문자가 보이죠? 이것이 퍼미션을 나타냅니다.
제일 처음의 한글자는 디렉토리인지 파일인지를 나타냅니다. test는 디렉토리란
소리가 되겠죠? 그리고 해당 속성이 없는 index.html은 파일을 나타내구요.

그 다음으로 3자씩 끊어 각각 파일이나 디렉토리에 대한 소유자의 퍼미션, 그룹에
대한 퍼미션, 타인에 대한 퍼미션을 나타냅니다. r,w,x 3개 항목이 있죠. 강 항목은
아래와 같은 권한을 뜻합니다.

r = Read. 읽기권한. = 4
w = Write. 쓰기권한. = 2
x = eXcute. 실행권한. = 1

위의 index.html 파일의 경우 rw-r--r--로 되어있죠? 이는 소유자는 읽기와 쓰기가
가능하며, 그룹이나 타인에 대해서는 읽기만 가능함을 뜻합니다. 3자리씩 끊었을때
각 권한에 대한 숫자를 더해 3자리 숫자 표기를 주로 합니다.

위 index.html의 경우 rw-r--r--를 숫자로 표기하면 644가 됩니다. 3자리씩 끊어
rw-는 읽기4+쓰기2=6, 그룹과 타인의 경우는 r--이기 때문에 읽기4 권한만 갖습니다.
디렉토리의 경우 rwxr-xr-x는 755로 표현할 수 있겠죠? ^^ 이 숫자를 이용해 chmod
명령을 이용해 퍼미션을 바꿀 수 있습니다.

[bihon@xxx public_html]$ ls -l
total 2
-rw-r--r--    1 bihon bihon      208 Aug 15 11:25 index.html
drwxr-xr-x    2 bihon bihon     4096 Aug 25 19:47 test
[bihon@xxx public_html]$ chmod 777 test
[bihon@xxx public_html]$ ls -l
total 2
-rw-r--r--    1 bihon bihon      208 Aug 15 11:25 index.html
drwxrwxrwx    2 bihon bihon     4096 Aug 25 19:47 test
[bihon@xxx public_html]$

퍼미션 바로 뒤의 숫자는 하드 링크수, 그 뒤로 소유자명, 그룹명, 용량, 최종 수정일
및 시간, 이름 등이 차례로 자리합니다.

TELNET이나 FTP 접속을 하여 파일을 생성하거나, 업로드할 경우 파일은 기본적으로
644, 디렉토리의 경우 755 퍼미션을 갖습니다. umask값에 의해 기본으로 지정되었기
때문입니다. 이때 파일의 소유자는 당연히 정상적으로 Login한 자신이 됩니다.

여기서 알아둬야 할 부분이 있습니다. PHP 프로그램은 계정에 올려두고 웹브라우저를
통해 접근하게 됩니다. 이때 해당 파일의 타인에 대한 권한 중 읽기 권한이 있어야
해당 PHP 프로그램의 실행 결과를 볼 수 있습니다.

이때 웹상에서 접근하게 되는 PHP 프로그램이 파일을 생성하게 될 경우 소유자는
nobody가 됩니다. 또한 해당 디렉토리에 대한 타인의 쓰기 권한이 있어야 파일을
생성할 수 있습니다. 위의 목록 중 test 디렉토리에 들어가볼까요?

[bihon@xxx public_html]$ cd test // test 디렉토리로 이동
[bihon@xxx test]$ ls -l // 목록 출력
total 1
-rw-rw-r--    1 bihon    bihon       92 Aug 26 02:43 create.php
[bihon@xxx test]$

create.php 파일이 하나 있습니다. 이를 실행하려면 웹브라우저를 통해 접근해야 하죠.
http://address/test/create.php 라고 접근하면 create.php 파일이 실행됩니다. 아,
먼저 이 파일의 내용을 알아야겠죠? 파일의 내용은 다음과 같습니다.

[bihon@xxx test]$ cat create.php
<?
$fp = fopen("test.dat","w");
fwrite($fp,"test");
fclose($fp);
chmod("test.dat",0777);
?>
[bihon@xxx test]$

파일의 기록에 대해서는 오늘 다루겠지만, 어제 이용했던 fopen 함수가 쓰였죠?
test란 내용을 담은 test.dat 파일을 생성하고, 권한을 바꾸는 프로그램이었습니다.
이를 실행하고 목록을 출력하면 아래처럼 파일이 생성된 것을 볼 수 있습니다.

[bihon@xxx test]$ ls -l // 목록 출력
total 1
-rw-rw-r--    1 bihon    bihon       92 Aug 26 02:43 create.php
-rwxrwxrwx    1 nobody   nobody       4 Aug 26 02:59 test.dat
[bihon@xxx test]$ cat test.dat
test
[bihon@xxx test]$

소유자와 그룹이 nobody로 되어있죠? 만약 test란 디렉토리의 권한 중 타인에 대한
쓰기 권한이 없었다면 다음과 같은 에러 메시지가 출력됩니다.

Forbidden
You don't have permission to access /test/create.php on this server.

강의에 필요한 부분까지만 살펴봤습니다. 결론을 내려볼까요?

앞으로 PHP를 이용한 프로그램을 작성하는데 있어 파일을 다루어야 할 경우 PHP
프로그램이 위치한 디렉토리나 제어할 디렉토리의 퍼미션이 제대로 설정되어 있어야
한다는 점입니다. 위의 내용에 대해 대충이나마 이해는 하고 있어야 합니다.


▷ 파일 쓰기

위에서 퍼미션에 대한 내용을 다루면서 create.php 파일을 예로 들었습니다. 그
내용이 전부입니다. 가볍게 다시 살펴볼까요?


예제 : http://dreamphp.com/study/exam15-1.php

소스는 다음과 같습니다.

<?
$filename = "exam15-1.txt";
$fp = fopen($filename,"w");
fwrite($fp,"홍길동");
fclose($fp);
chmod($filename,0777);
?>

이를 실행하면 화면상에는 아무런 내용도 출력되지 않습니다. 다만 만약 이 예제를
실행하는 디렉토리에 대해 타인에 대한 쓰기 권한이 없을 경우 아래와 같은 에러
메시지를 접할 수 있을 것입니다.

Warning: fopen("exam15-1.txt","w") - Permission denied in
  /home/bihon/public_html/study/exam15-1.php on line 3
Warning: Supplied argument is not a valid File-Handle resource in
  /home/bihon/public_html/study/exam15-1.php on line 4
Warning: Supplied argument is not a valid File-Handle resource in
  /home/bihon/public_html/study/exam15-1.php on line 5
Warning: chmod failed: No such file or directory in
  /home/bihon/public_html/study/exam15-1.php on line 6

파일 읽기 편에서는 파일을 읽을때 모드 "r"을 쓴다 했습니다. 파일 기록을 위해서는
"w" 모드로 열며, 파일에 내용 기록은 fwrite() 함수를 사용합니다. 또한 만들어진
파일은 소유자와 그룹이 타인 즉 nobody이기 때문에 해당 계정의 주인이 TELNET이나
FTP로 접속하였을 경우 읽거나 삭제를 못하는 경우가 발생할 수 있습니다. 이를
방지하기 위해 생성된 파일의 권한을 chmod() 함수를 이용해 777로 바꾼 것입니다.

그럼 파일이 제대로 생성되었는지 살펴볼까요?


예제 : http://dreamphp.com/study/exam15-2.php

소스는 다음과 같습니다.

<?
$filename = "exam15-1.txt";
$fp = fopen($filename,"r");
$data = fread($fp,6);
fclose($fp);
echo $data;
?>

파일 읽기편에서 다룬 내용 그대로입니다. exam15-1.txt 파일을 읽기 모드로 열어
6바이트 읽은 뒤 파일을 닫고, 변수에 저장했던 값을 출력하는 간단한 형태의 PHP
프로그램입니다. 실행 결과는 당연히 "홍길동"만 찍히죠~

파일을 간단히 생성하는 방법도 있지만, 내용까지 기록하기 위해서는 위의 방법을
주로 이용합니다. 아니, 이 방법 뿐만 아니라 파일을 생성하는 방법에는 여러가지가
있지만 이 강의에서는 파일 쓰기에 대해 여기까지만 알고 있으면 됩니다. ^^

▶ 파일 쓰기에 대한 예는 실제 작은 프로그램들을 만드는 과정에서 보다 자세히
다뤄보도록 하겠습니다.

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:07)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >> 웹 프로그래밍
* 이동후 위치 : 웹 공부 >>

* 전설님에 의해서 게시물 이동되었습니다 (2004-05-30 17:12)
* 이동한 이유 :
* 원래의 위치 : 웹 공부 >>
* 이동후 위치 : 웹 공부 >> 웹 프로그래밍
추천 (4) 선물 (0명)
IP: ♡.149.♡.65
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11863
관리자
2003-09-20
11412
관리자
2003-09-20
20545
지구인
2010-08-27
19341
지구인
2009-09-07
13661
SOLIDH
2010-01-29
15620
엔죠라이프
2004-10-07
16716
광수
2001-10-17
424
광수
2001-10-17
575
광수
2001-10-17
718
광수
2001-10-17
372
광수
2001-10-17
445
광수
2001-10-17
709
광수
2001-10-17
591
광수
2001-10-17
564
광수
2001-10-17
597
광수
2001-10-17
502
광수
2001-10-17
622
광수
2001-10-17
832
광수
2001-10-17
792
광수
2001-10-17
628
광수
2001-10-17
786
광수
2001-10-17
450
광수
2001-10-17
508
광수
2001-10-17
445
광수
2001-10-17
656
광수
2001-10-17
508
광수
2001-10-17
732
모이자 모바일