php
PHP - fopen 함수
resource fopen ( string $filename , string $mode [, bool $use_include_path= false [, resource $context ]] )
(PHP 4, PHP 5)
fopen 함수는 파일을 열거나 새로 만들 수 있습니다. 첫 번째 인자는 파일명 또는 절대경로를 입력하고, 두 번째 인자는 다음 표의 모드를 사용할 수 있습니다.
다음은 바이너리 그림 출력 예제입니다.
fpassthru 함수는 처음 파일 포인터에서 끝까지의 파일 내용을 읽어 표준 출력으로 보냅니다.
fopen 함수가 바이너리에 안전하지만 바이너리와 텍스트 파일을 구별할 수 있는 윈도우 시스템에서는 b 플래그는 중요합니다. 그리고 fopen 함수를 사용할 때 fputs 함수나 fgets 함수 보다는 fread 함수나 fwrite 함수를 사용하는 것이 권장되며, 바이너리와 텍스트 파일을 구분하지 못하는 유닉스에서는 b 플래그가 필요치 않으나 윈도우환경에서는 중요한 부분입니다. 시스템 환경이 바뀔 수 있는 부분이 있다면 b 플래그를 사용하는 것이 좋습니다.
fputs 함수나 fgets 함수로 바이너리로 열거나 작성하더라도 바이너리 자료를 유지하지 못하는 경우가 있으므로 바이너리 자료 그대로 유지되는 fread 함수나 fwrite 함수를 이용하는 것을 권고하고 있습니다.
(PHP 4, PHP 5)
fopen 함수는 파일을 열거나 새로 만들 수 있습니다. 첫 번째 인자는 파일명 또는 절대경로를 입력하고, 두 번째 인자는 다음 표의 모드를 사용할 수 있습니다.
모 드 | 설 명 |
---|---|
r | 읽기 전용으로 오픈합니다. |
r+ | 읽기와 쓰기 모드로 오픈합니다. |
w | 쓰기 전용으로 오픈합니다. 기존 파일 내용은 완전히 지워지고, 새로 만듭니다. 파일이 존재하지 않는다면 새로 만듭니다. |
w+ | 읽기와 쓰기 모드로 오픈합니다. 기존 파일 내용은 완전히 지워지고, 새로 만듭니다. 파일이 존재하지 않는다면 새로 만듭니다. |
a | 내용 추가, 파일의 끝에 내용을 추가합니다. 파일이 존재하지 않는다면 새로 만듭니다. |
a+ | 내용 추가와 읽기모드로 오픈하여 파일의 끝에 내용을 추가합니다. 파일이 존재하지 않는다면 새로 만듭니다. |
b | 바이너리모드로 오픈합니다. 윈도우환경에서는 필수 모드 |
다음은 바이너리 그림 출력 예제입니다.
<?php
// rb -> 읽기전용, 바이너리로 오픈합니다.
if($fp = fopen('logo.gif', 'rb')){
// 바이너리로 읽기
// 파일 포인터로 지정된 파일에서 최대 길이 1024*100 만큼 브라우저로 출력합니다.
print(fread($fp,1024*100));
flush();
// 파일을 오픈하면, 다른 스크립트에서 이용할 수 있도록 반드시 파일 포인터를 닫아야 합니다.
fclose($fp);
} else {
print('파일을 찾을 수 없습니다.');
}
?>
<?php
$filename = 'test.bmp';
header("content-type: file/unknown");
header("content-length: ".filesize($filename));
header("content-disposition: attachment; filename=\"${filename}\"");
header("content-description: php generated data");
header("pragma: no-cache");
header("expires: 0");
if($fp = fopen($filename, 'rb')){
while(!feof($fp)) {
print(fread($fp,1024));
flush();
}
fclose($fp);
} else {
print('파일을 찾을 수 없습니다.');
}
?>
fpassthru 함수는 처음 파일 포인터에서 끝까지의 파일 내용을 읽어 표준 출력으로 보냅니다.
<?php
// 읽기전용으로 오픈합니다.
if($fp = fopen('readme.txt', 'rb')){
fpassthru($fp);
flush();
fclose($fp);
} else {
print('파일을 찾을 수 없습니다.');
}
?>
fopen 함수가 바이너리에 안전하지만 바이너리와 텍스트 파일을 구별할 수 있는 윈도우 시스템에서는 b 플래그는 중요합니다. 그리고 fopen 함수를 사용할 때 fputs 함수나 fgets 함수 보다는 fread 함수나 fwrite 함수를 사용하는 것이 권장되며, 바이너리와 텍스트 파일을 구분하지 못하는 유닉스에서는 b 플래그가 필요치 않으나 윈도우환경에서는 중요한 부분입니다. 시스템 환경이 바뀔 수 있는 부분이 있다면 b 플래그를 사용하는 것이 좋습니다.
fputs 함수나 fgets 함수로 바이너리로 열거나 작성하더라도 바이너리 자료를 유지하지 못하는 경우가 있으므로 바이너리 자료 그대로 유지되는 fread 함수나 fwrite 함수를 이용하는 것을 권고하고 있습니다.
<?php
if($fp = @fopen('readme.txt', 'ab+')){
fwrite($fp, "바이너리로 작성합니다.");
fclose($fp);
}
if($fp = @fopen('readme.txt', 'rb')){
fread($fp);
ob_flush();
flush();
fclose($fp);
} else {
print('파일을 찾을 수 없습니다.');
}
?>
0 댓글