[PHP] 파일 시스템(File System) 다루기 #1
PHP 파일열기와 닫기
무슨일을 하던지 절차가 있기 마련입니다. php에서 파일을 사용하는 일반적인 절차는 여타 언어와 다르지 않습니다. 파일을 열고, 용도에 맞게 사용하고, 닫아주면 됩니다.
1. 파일열기
php에서 파일을 사용하기 위해서 가장 먼저 해야 할 절차라면 파일을 여는 것입니다. php에서는 파일을 열기 위해서 fopen 함수를 제공합니다.
※php에서 사용되는 함수들은 C언어의 함수들과 상당히 유사한 것이 많습니다. 파일관련 함수들 역시 예외는 아닙니다.
int fopen (string filename, string mode [, int use_include_path])
위는 fopen 함수의 원형입니다. fopen 함수는 파일열기에 성공하면 다른 파일입출력 함수들이 참조할 정수 형의 파일핸들(포인터)을 리턴해 줍니다. 이 리턴 값을 변수에 저장했다가 대다수의 파일관련 함수들을 사용할 때 매개변수로 넘겨주게 되면 파일관련 함수들은 넘겨받은 변수의 값을 참조해서 사용하게 될 파일을 알수 있게 됩니다. 파일열기에 실패시에는 false를 뜻하는 0을 리턴하게 됩니다. 아래는 fopen 함수의 사용 예입니다.
//로컬에 있는 test.php 파일을 읽기전용으로 엽니다. $fp=fopen("./test.php","r");
//http프로토콜을 사용해서 웹상에있는 test.php 파일을 읽기전용으로 엽니다. $fp=fopen("http://www.wembadang.net/test.php/","r");
//ftp프로토콜을 사용해서 ftp서버상에 있는 test.php 파일을 읽기 전용으로 엽니다. ftp로 접속을 맺기 위해서는 경로상에 호스트명 뿐만 아니라, 사용자명과 비밀번호를 같이 입력해 놓아야 합니다. 아래의 ftp 예에서는 myuser가 사용자명 password가 비밀번호입니다. $fp=fopen("ftp:myuser:password@webmadang.net/test.php","r");
| | fopen함수는 로컬에 저장되어 있는 파일 뿐만 아니라, http와 ftp 프로토콜을 이용해서 원격에 있는 파일을 열수도 있습니다. 하지만 이 부분은 보안에 민감한 사항이라서 몇가지 제약사항이 있습니다.
※ 제약사항
http와 ftp을 이용해서 파일을 열기 위해서는 php.ini 파일의 allow_url_fopen 옵션이 On으로 설정되어져 있어야 합니다. 아마도 웹호스팅 서비스를 받고 있다면 대부분의 서버관리자는 allow_url_fopen 옵션을 Off로 설정해 놓았을 것입니다. ftp는 한가지 더 제약사항이 있는데 ftp 서버가 passive모드를 지원해야 만 합니다.
아래는 allow_url_fopen 옵션이 Off로 설정되었을때 http 프로토콜을 이용해서 fopen함수를 사용할 때 출력되는 에러메시지입니다.
Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration
| | 위의 함수의 원형에서 알수 있듯이 fopen 함수는 3개의 파라미터를 인자로 받습니다.
1) 첫번째 파라미터 String filename 열고자 하는 파일명입니다.
2) 두번째 파라미터 String mode 파일을 여는 방법을 지정하는 파라미터로 읽기 - "r", 쓰기- "w", 추가 - "a" 옵션이 있습니다.
정리해 보면 아래와 같습니다.
r 읽기 전용으로 엽니다. 파일 포인터는 파일의 처음에 위치합니다. r+ 존재하는 파일을 갱신(읽고,쓰기)용으로 엽니다. 파일 포인터는 파일의 처음에 위치합니다.
w 쓰기 전용으로 파일을 엽니다. 동일한 파일명의 파일이 존재하는 경우 모든 내용을 삭제합니다, 파일이 존재하지 않으면 파일을 새로 생성합니다. 두경우 모두 파일 포인터는 파일의 처음에 위치합니다. w+ 갱신(읽고,쓰기)용으로 파일을 엽니다. 동일한 파일명의 파일이 존재하는 경우 모든 내용을 삭제하며, 파일이 존재하지 않으면 파일을 새로 생성합니다. 두경우 모두 파일 포인터는 파일의 처음에 위치합니다.
a 추가용으로 파일을 엽니다. 파일이 없으면 파일을 생성하고, 파일이 존재하면 파일포인터는 파일의 끝에 위치합니다. a+ 추가용, 갱신용으로 파일을 엽니다. 파일이 없으면 파일을 생성하고, 파일이 존재하면 파일 포인터는 파일의 끝에 위치합니다.
3) 세번째 파라미터 use_include_path는 선택적 파라미터입니다.
정수"1"또는 true를 지정했을 경우 지정된 디렉토리에 파일이 존재하지 않으면 include path에서 파일을 찾습니다.
2. 파일닫기
파일에 대한 작업이 끝났을 경우 fclose 함수를 이용해서 파일을 닫아 줍니다. 파일을 닫지 않고 php 스크립트가 종료되더라도 파일은 알아서 닫히게 되지만, 전에 사용했던 파일 포인터를 재 사용해야 해야 할 경우, 또는 과다한 파일 함수 호출시 파일을 열지 못한는 경우가 생길 수도 있으므로 파일을 닫아주는 습관을 들이는 것이 좋습니다.
php에서 파일닫기를 위해서는 fclose 함수를 사용합니다.
int fclose(int fp);
파라미터인 fp는 fopen함수의 리턴값인 정수형 파일 포인터이며 파일닫기에 성공하면 true 를 뜻하는 정수1을 실패하면 false를 뜻하는 0 을 반환합니다.
아래는 test.php 파일을 읽기 전용으로 열어서 그 내용을 화면에 출력하는 간단한 예입니다. fgetc 함수는 파일의 내용을 한 글자씩 읽어들이는 함수입니다.
<?php $filename = "test.php"; $fp = fopen($filename, "r") or die("파일열기에 실패하였습니다");
$buffer = ""; while(!feof($fp)){ $buffer .= fgetc($fp); }
echo "<pre>".htmlspecialchars($buffer)."</pre>"; fclose($fp); ?> | |
|