English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 PHP의 파일 시스템 함수를 사용하여 파일을 동적으로 생성하고, 접근(또는 읽기)하고, 조작하는 방법을 배울 것입니다.
PHP는 서버 측 프로그래밍 언어이므로, 웹 서버에 저장된 파일과 디렉토리를 사용할 수 있게 합니다. 이 튜토리얼에서는 PHP 파일 시스템 함수를 사용하여 웹 서버에서 파일을 생성하고, 접근하고,操作할 수 있게 배울 것입니다.
파일을 사용하려면 먼저 파일을 열어야 합니다. PHP fopen() 함수는 파일을 열기 위해 사용됩니다. 이 함수의 기본 문법은 다음과 같은 방식으로 제공됩니다:
fopen(filename, mode)
fopen(filename, mode)에 전달하는 첫 번째 매개변수는 열고자 하는 파일의 이름을 지정하며, 두 번째 매개변수는 파일을 어떤 모드로 열어야 할지 지정합니다. 예를 들어:
<?php $handle = fopen("data.txt", "r"); ?>테스트를 해보세요‹/›
아래와 같은 방법 중 하나로 파일을 열 수 있습니다:
모드 | 그것이 무엇을 할 수 있는지 |
---|---|
r | 읽기 만 파일을 열기 |
r+ | 읽기와 쓰기로 파일을 열기 |
w | 쓰기 만 사용할 파일을 열고 파일 내용을 지우기. 파일이 존재하지 않으면 PHP가 파일을 생성하려고 시도합니다. |
w+ | 읽기와 쓰기로 파일을 열고 파일 내용을 지우기. 파일이 존재하지 않으면 PHP가 파일을 생성하려고 시도합니다. |
a | 추가. 쓰기 만 사용할 파일을 열기. 파일의 마지막 부분에 쓰기를 통해 파일 내용을 유지합니다. 파일이 존재하지 않으면 PHP가 파일을 생성하려고 시도합니다. |
a+ | 읽기/추가. 파일을 읽기와 쓰기로 열기. 파일의 마지막 부분에 쓰기를 통해 파일 내용을 유지합니다. 파일이 존재하지 않으면 PHP가 파일을 생성하려고 시도합니다. |
x | 쓰기 만 사용할 파일을 열기. 파일이 존재하면 False를 반환하고 오류를 생성합니다. 파일이 존재하지 않으면 PHP가 파일을 생성하려고 시도합니다. |
x+ | 읽기와 쓰기로 파일을 열기; 그렇지 않으면 'x'와 같은 행동을 합니다. |
존재하지 않는 파일을 열려고 했을 때 PHP는 경고 메시지를 생성합니다. 따라서 이러한 오류 메시지를 피하기 위해 파일이나 디렉토리에 접근하기 전에 PHP file_exists() 함수를 사용하여 파일이나 디렉토리가 존재하는지 간단히 확인해야 합니다.
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ // 이 파일을 열기 시도합니다 $handle = fopen($file, "r"); } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
힌트:파일과 디렉토리의操作은 오류가 쉽게 발생할 수 있습니다. 따라서 오류 검사의 어떤 형태를 구현하는 것이 좋습니다. 이렇게 하면 오류가 발생하면 스크립트가 예술적으로 오류를 처리할 수 있습니다. 관련 내용을 참조하세요PHP 오류 처리教程
파일을 사용한 후에는 닫아야 합니다. fclose() 함수는 다음 예제와 같이 파일을 닫습니다:
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //읽을 파일을 엽니다 $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); /* 이곳에는 실행해야 할 코드가 몇 가지 있습니다 */ //파일 핸들을 닫습니다 fclose($handle); } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
주의:PHP는 스크립트가 종료될 때 자동으로 모든 열린 파일을 닫지만, 모든 작업을 수행한 후 파일을 닫는 것이 좋습니다.
이제 파일을 열고 닫는 방법을 이해했습니다. 다음 장에서 파일에서 데이터를 읽는 방법을 배우게 됩니다. PHP는 파일에서 데이터를 읽는 데 사용할 수 있는 몇 가지 함수가 있습니다. 한 번의 작업으로 전체 파일을 문자로 읽을 수 있습니다.
fread() 함수는 파일에서 지정된 수의 문자를 읽을 수 있습니다. 이 함수의 기본 문법을 사용할 수 있습니다.
fread(file handle, length in bytes)
이 함수는 두 개의 매개변수를 받아들입니다-파일 핸들과 읽을 바이트 수입니다. 다음 예제는 "data.txt" 파일에서 읽습니다.2공백을 포함한 0개 바이트입니다. 예를 들어, "data.txt" 파일은 "The quick brown fox jumps over the lazy dog."라는 텍스트를 포함하고 있습니다.
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //읽을 파일을 엽니다 $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); //파일에서 고정된 바이트 수를 읽습니다 $content = fread($handle, "20); //파일 핸들을 닫습니다 fclose($handle); //파일 내용을 표시합니다 echo $content; } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
위의 예제는 다음과 같은 출력을 생성합니다:
The quick brown fox
fread() 함수는 filesize() 함수와 함께 사용될 수 있습니다. fread() 함수는 파일의 전체 내용을 한 번에 읽습니다. filesize() 함수는 파일의 크기를 바이트 단위로 반환합니다.
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //읽을 파일을 엽니다 $handle = fopen($file, "r") or die("ERROR: Cannot open the file."); //전체 파일을 읽습니다 $content = fread($handle, filesize($file)); //파일 핸들을 닫습니다 fclose($handle); //파일 내용을 표시합니다 echo $content; } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
위의 예제는 다음과 같은 출력을 생성합니다:
The quick brown fox jumps over the lazy dog.
PHP에서 파일 전체 내용을 읽는 가장 간단한 방법은 readfile() 함수를 사용하는 것입니다. 이 함수는 파일을 열지 않고도 파일 내용을 읽을 수 있게 합니다. 다음 예제는 위의 예제와 같은 출력을 생성합니다:
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //전체 파일을 읽고 출력합니다 readfile($file) or die("ERROR: Cannot open the file."); } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
위의 예제는 다음과 같은 출력을 생성합니다:
The quick brown fox jumps over the lazy dog.
파일 전체 내용을 읽어들이지 않고도 파일을 읽을 수 있는 또 다른 방법은 file_get_contents() 함수를 사용하는 것입니다. 이 함수는 파일 이름과 경로를 받아들여, 전체 파일을 문자열 변수에 읽어들입니다. 다음은 예제입니다:
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ // 전체 파일을 문자열로 읽어들입니다 $content = file_get_contents($file) or die("ERROR: Cannot open the file."); //파일 내용을 표시합니다 echo $content; } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
파일 전체 데이터를 읽어들이는 또 다른 방법은 PHP의 file() 함수입니다. 이 함수의 기능은 file_get_content() 함수와 유사하지만, 파일 내용을 단일 문자열로 대신하여 행 배열로 반환합니다. 반환된 배열의 각 요소는 파일의 한 행에 해당합니다.
파일 데이터를 처리하려면 사용해야 합니다foreach 루프배열을 순회합니다. 이 예제는 파일을 배열에 읽어들이고, 그 다음 루프를 사용하여 표시하는 예제입니다:
<?php $file = "data.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //전체 파일을 배열에 읽어들이기 $arr = file($file) or die("ERROR: Cannot open the file."); foreach($arr as $line){ echo $line; } } else { echo "ERROR: File does not exist."; } ?>테스트를 해보세요‹/›
또한 PHP fwrite() 함수를 사용하여 데이터를 파일에 쓰거나 기존 파일에 추가할 수 있습니다. 이 함수의 기본 문법은 다음과 같이 제공됩니다:
fwrite(file handle, string)
fwrite() 함수는 두 개의 매개변수를 받아들입니다—파일 핸들과 쓰일 데이터 문자열, 다음 예제와 같이:
<?php $file = "note.txt"; //쓰려는 데이터 문자열 $data = "The quick brown fox jumps over the lazy dog."; //파일을 쓰기 위해 열기 $handle = fopen($file, "w") or die("ERROR: Cannot open the file."); //데이터를 파일에 쓰기 fwrite($handle, $data) or die ("ERROR: Cannot write the file."); //파일 핸들을 닫습니다 fclose($handle); echo "데이터가 성공적으로 파일에 쓰였습니다."; ?>
위의 예제에서 "note.txt" 파일이 존재하지 않으면 PHP는 자동으로 파일을 생성하여 데이터를 쓰게 됩니다. 그러나 "note.txt" 파일이 이미 존재하면 PHP는 새 데이터를 쓰기 전에 파일의 내용을 지우게 됩니다(만약 있으면), 하지만 파일에 추가하고 기존 내용을 유지하고 싶다면 위의 예제를 사용하세요모드 a 대신 w.
또 다른方法是 file_put_contents() 함수를 사용합니다. 이는 file_get_contents() 함수의 대응 기능으로, 데이터를 파일에 쓰기 위해 파일을 열지 않아도 될 수 있는 간편한 방법을 제공합니다. 이 함수는 파일의 이름과 경로 그리고 파일에 쓰일 데이터를 받아들입니다. 다음은 예제입니다:
<?php $file = "note.txt"; //쓰려는 데이터 문자열 $data = "The quick brown fox jumps over the lazy dog."; //데이터를 파일에 쓰기 file_put_contents($file, $data) or die("ERROR: Cannot write the file."); echo "데이터가 성공적으로 파일에 쓰였습니다."; ?>
file_put_contents() 함수에서 지정된 파일이 이미 존재하면, 기본적으로 PHP는 그 파일을 덮어쓰게 됩니다. 파일의 내용을 유지하고 싶다면 file_put_contents() 함수에 특수한 FILE_APPEND 래빗을 세 번째 매개변수로 전달할 수 있습니다. 이는 새 데이터를 파일에 추가하여 덮어쓰지 않습니다. 다음은 예제입니다:
<?php $file = "note.txt"; //쓰려는 데이터 문자열 $data = "The quick brown fox jumps over the lazy dog."; //데이터를 파일에 쓰기 file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file."); echo "데이터가 성공적으로 파일에 쓰였습니다."; ?>
PHP의 rename() 함수를 사용하여 파일이나 디렉토리를 이름을 바꿀 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다:
<?php $file = "file.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //이 파일을 이름을 바꾸기 시도합니다 if(rename($file, "newfile.txt")){ echo "파일 이름 변경이 성공적으로 완료되었습니다."; } else { echo "오류: 파일을 이름을 바꿀 수 없습니다."; } } else { echo "오류: 파일이 존재하지 않습니다."; } ?>
PHP의 unlink() 함수를 사용하여 파일이나 디렉토리를 지울 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다:
<?php $file = "note.txt"; //파일이 존재하는지 확인합니다 if(file_exists($file)){ //이 파일을 지우기 시도합니다 if(unlink($file)){ echo "파일이 성공적으로 지워졌습니다."; } else { echo "오류: 파일을 지울 수 없습니다."; } } else { echo "오류: 파일이 존재하지 않습니다."; } ?>
다음 장에서는 PHP에서디렉토리나 폴더의자세한 정보
아래 표는 다른 유용한 PHP 파일 시스템 함수를 요약하며, 이 함수들은 파일을 동적으로 읽고 쓰기에 사용할 수 있습니다.
기능 | 설명 |
---|---|
fgetc() | 한 문자를 한 번에 읽습니다. |
fgets() | 한 행을 한 번에 읽습니다. |
fgetcsv() | 콤마로 구분된 값의 한 행을 읽습니다. |
filetype() | 파일의 유형을 반환합니다. |
feof() | 파일의 마지막에 도달했는지 확인합니다. |
is_file() | 파일이 일반 파일인지 확인합니다. |
is_dir() | 파일이 디렉토리인지 확인합니다. |
is_executable() | 파일이 실행 가능한지 확인합니다. |
realpath() | 규제된 절대 경로 이름을 반환합니다. |
rmdir() | 비어 있는 디렉토리를 삭제합니다. |
다른 유용한 PHP 파일 시스템 함수를 얻기 위해 PHP 파일 시스템 참조를 확인하십시오.