티스토리 뷰

오늘도 개발자/PHP

[PHP]파일시스템(file system)

오늘도공대생 2022. 1. 29. 21:59

basename(string $path, string $suffix = ""): string

파일이나 디렉토리에 대한 경로를 포함하는 문자열이 주어지면 이 함수는 후행 이름 구성요소를 반환합니다.

basename() 은 로케일을 인식하므로 멀티바이트 문자 경로가 있는 올바른 기본 이름을 보려면 setlocale() 함수를 사용하여 일치하는 로케일을 설정해야 합니다. path현재 로케일에 유효하지 않은 문자가 포함되어있으면 basename() 의 동작 이 정의되지 않습니다.

  • dirname() - 상위 디렉토리의 경로를 반환합니다.
  • pathinfo() - 파일 경로에 대한 정보를 반환합니다.
echo "1) ".basename("/etc/sudoers.d", ".d").PHP_EOL;
echo "2) ".basename("/etc/sudoers.d").PHP_EOL;
echo "3) ".basename("/etc/passwd").PHP_EOL;
echo "4) ".basename("/etc/").PHP_EOL;
echo "5) ".basename(".").PHP_EOL;
echo "6) ".basename("/");
/* result to:
1) sudoers
2) sudoers.d
3) passwd
4) etc
5) .
6) 
*/

 

realpath(string $path): string|false

정규화된 절대 경로 이름을 반환 합니다. 성공 시 정규화된 절대 경로 이름을 반환합니다. 결과 경로에는 기호 링크 /./, /../ 또는 extra /구성 요소가 없습니다. \및 /와 같은 후행 구분 기호도 제거됩니다.

실행 중인 스크립트에는 계층 구조의 모든 디렉토리에 대한 실행 권한이 있어야 합니다. 그렇지 않으면 realpath()false를 반환 합니다.

예제 #1 

chdir('/var/www/');
echo realpath('./../../etc/passwd') . PHP_EOL;
echo realpath('/tmp/') . PHP_EOL;
/* 출력결과:
/etc/passwd 
/tmp
*/

예제 #2.  Windows의 realpath()

echo realpath('/windows/system32'), PHP_EOL;
echo realpath('C:\Program Files\\'), PHP_EOL;
/* 실행 결과
C:\WINDOWS\System32
C:\Program Files
*/

 

 

pathinfo(string $path, int $flags = PATHINFO_ALL): array|string

파일 경로에 대한 정보를 반환합니다. 현재 경로 정보 검색에 대한 정보는 사전 정의된 예약 변수 섹션을 참조하세요.

pathinfo() 는 로케일을 인식하므로 멀티바이트 문자가 포함된 경로를 올바르게 구문 분석하려면 setlocale() 함수를 사용하여 일치하는 로케일을 설정해야 합니다.

예제 #1 pathinfo() 기본 사용

$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n";
/* output:
/www/htdocs/inc
lib.inc.php
php
lib.inc
*/

 

 

 

 

glob(string $pattern, int $flags = 0): array|false

libc glob() 함수에서 사용하는 규칙에 따라 pattern에 일치하는 모든 경로 이름을 검색합니다. 이는 일반적인 셸에서 사용하는 규칙과 유사합니다.

foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
/* result to:
funclist.txt size 44686
funcsummary.txt size 267625
quickref.txt size 137820
*/

fnmatch(string $pattern, string $filename, int $flags = 0): bool

전달된 $filename 항목이 지정된 $pattern이 일치하는지 판별합니다. (패턴에 대해 파일 이름 일치 여부 체크)

사실 fnmatch보다는 결국 정규표현식을 활용해 체크하는게 일반적인 방법 입니다.

 

copy(string $from, string $to, ?resource $context = null): bool

$from에 파일 $to를 복사 합니다. 파일을 이동하려면 rename() 함수를 사용하세요!

 대상 파일이 이미 있는 경우 덮어씁니다.

  • move_uploaded_file() - 업로드된 파일을 새 위치로 이동합니다.
  • rename() - 파일 또는 디렉토리의 이름을 바꿉니다.

 

mkdir(string $directory, int $permissions = 0777, bool $recursive = false, ?resource $context = null): bool

$directory에 의해 지정된 디렉토리 생성을 시도합니다.

  • is_dir() - 파일 이름이 디렉토리인지 여부를 알려줍니다.

 

rmdir(string $directory, ?resource $context = null): bool

$directory에 의해 명명된 디렉토리를 제거하려고 시도합니다. 디렉토리는 비어 있어야 하며 관련 권한이 이를 허용해야 합니다. 

 

unlink(string $filename, ?resource $context = null): bool

$filename을 삭제 합니다. Unix C unlink() 함수와 유사합니다. 

 

fopen(
    string $filename,
    string $mode,
    bool $use_include_path = false,
    ?resource $context = null
): resource|false

파일 또는 URL을 엽니다.

$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");

 fopen()의 사용 가능한 $mode 목록 및 설명

'r' 읽기 전용으로 엽니다. 파일 시작 부분에 파일 포인터를 놓습니다.
'r+' 읽기와 쓰기를 위해 열려 있습니다. 파일 시작 부분에 파일 포인터를 놓습니다.
'w' 쓰기 전용으로 엽니다. 파일 포인터를 파일 시작 부분에 놓고 파일을 0 길이로 자릅니다. 파일이 존재하지 않으면 생성을 시도하십시오.
'w+' 읽기와 쓰기를 위해 열려 있습니다. 그렇지 않으면 와 같은 동작을 'w'합니다.
'a' 쓰기 전용으로 엽니다. 파일 끝에 파일 포인터를 놓습니다. 파일이 존재하지 않으면 생성을 시도하십시오. 이 모드에서 fseek() 는 아무 효과가 없으며 쓰기는 항상 추가됩니다.
'a+' 읽기와 쓰기를 위해 열려 있습니다. 파일 끝에 파일 포인터를 놓습니다. 파일이 존재하지 않으면 생성을 시도하십시오. 이 모드에서 fseek() 는 읽기 위치에만 영향을 미치고 쓰기는 항상 추가됩니다.
'x' 쓰기 전용으로 만들고 엽니다. 파일 시작 부분에 파일 포인터를 놓습니다. 파일이 이미 존재하는 경우 fopen() 호출은 level 의 오류를 반환 false하고 생성하여 실패합니다 E_WARNING. 파일이 존재하지 않으면 생성을 시도하십시오. 이것은 기본 시스템 호출 O_EXCL|O_CREAT에 대한 플래그 를 지정하는 것과 같습니다.open(2)
'x+' 읽고 쓰기 위해 만들고 엽니다. 그렇지 않으면 와 같은 동작을 'x'합니다.
'c' 쓰기 전용으로 파일을 엽니다. 파일이 없으면 생성됩니다. 존재하는 경우 잘리거나( 와 반대 'w') 이 함수에 대한 호출이 실패하지 않습니다( 의 경우처럼 'x'). 파일 포인터는 파일의 시작 부분에 위치합니다. 파일 수정을 시도하기 전에 권고 잠금을 원하는 경우 유용할 'w'수 있습니다 . 잠금이 요청됨).
'c+' 읽고 쓰기 위해 파일을 엽니다. 그렇지 않으면 와 같은 동작을 'c'합니다.
'e' 열린 파일 설명자에 close-on-exec 플래그를 설정합니다. POSIX.1-2008 준수 시스템에서 컴파일된 PHP에서만 사용할 수 있습니다.

 

 

file_get_contents(
    string $filename,
    bool $use_include_path = false,
    ?resource $context = null,
    int $offset = 0,
    ?int $length = null
): string|false

전체 파일을 문자열로 읽습니다. 이 함수는 file_get_contents() 가 지정된 최대 바이트에서 시작하여 문자열로 파일을 반환 한다는 점을 제외하면 file() 과 유사합니다. 

※ 공백과 같은 특수 문자가 있는 URI를 여는 경우 urlencode() 를 사용하여 URI를 인코딩해야 합니다 .

 

file(string $filename, int $flags = 0, ?resource $context = null): array|false

전체 파일을 배열로 반환해 줍니다.

* file_get_contents() 를 사용하여 파일의 내용을 문자열로 반환 할 수 있습니다 .

라인별로 각 index key마다 담기게 되는데 $flags 옵션을 통해 빈 라인은 제외할 수도 있습니다.

 

readfile(string $filename, bool $use_include_path = false, ?resource $context = null): int|false

 파일을 출력합니다.

예제 #1 readfile()을 사용하여 강제 다운로드

$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}

 

fgets(resource $stream, ?int $length = null): string|false

파일 포인터에서 한 줄을 가져옵니다.

예제 #1. 파일을 한 줄씩 읽기

$fp = @fopen("/tmp/inputfile.txt", "r");
if ($fp) {
    while (($buffer = fgets($fp, 4096)) !== false) {
        echo $buffer;
    }
    if (!feof($fp)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($fp);
}

feof(resource $stream): bool

파일 포인터에서 파일 끝을 테스트합니다. 파일의 끝인지 알아보고 끝이 아니면 다음 라인을 가져올 때 체크용으로 사용합니다.

 

 

fseek(resource $stream, int $offset, int $whence = SEEK_SET): int

파일 포인터를 찾거나 설정합니다.

$whence값은 다음과 같습니다.

  • SEEK_SET- 위치를 offset바이트와 ​​동일하게 설정합니다.
  • SEEK_CUR- 위치를 현재 위치 플러스로 설정 offset합니다.
  • SEEK_END- 위치를 파일 끝 플러스로 설정합니다 offset.
$fp = fopen('somefile.txt', 'r');
$data = fgets($fp, 4096);
fseek($fp, 0);

 

ftell(resource $stream): int|false

파일 읽기/쓰기 포인터의 현재 위치를 반환합니다.

$fp = fopen("/etc/passwd", "r");
$data = fgets($fp, 12);
echo ftell($fp); // 11
fclose($fp);
  • rewind() - 파일 포인터의 위치를 ​​되감습니다.

rewind(resource $stream): bool

 파일 포인터의 위치를 초기화합니다.

 

 

fpassthru(resource $stream): int

파일 포인터에 남아 있는 모든 데이터 출력

 

fread(resource $stream, int $length): string|false

// get contents of a file into a string
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

 

 

fwrite(resource $stream, string $data, ?int $length = null): int|false

파일 스트림에 데이터를 씁니다.

file_put_contents( string $filename, mixed $data, int $flags = 0, ?resource $context = null ): int|false

파일에 데이터를 쓰는 함수로, fopen() , fwrite() 및 fclose() 를 연속적으로 호출하여 파일에 데이터를 쓰는 것과 동일합니다.

 

fflush(resource $stream): bool

이 함수는 버퍼링된 모든 출력을 파일이 가리키는 리소스에 강제로 기록합니다

예제 #1 fflush() 를 사용한 파일 쓰기 예제

$filename = 'bar.txt';

$file = fopen($filename, 'r+');
rewind($file);
fwrite($file, 'Foo');
fflush($file);
ftruncate($file, ftell($file));
fclose($file);

 

ftruncate(resource $streamint $size): bool

파일을 주어진 길이로 자릅니다.

 

 

fclose(resource $stream): bool

열려 있는 파일 포인터를 닫습니다.

$handle = fopen('somefile.txt', 'r');
fclose($handle);

 

fstat(resource $stream): array|false

열린 파일 포인터를 사용하여 파일에 대한 정보를 가져 옵니다.

 

stat(string $filename): array|false

fstat()과 달리 파일 경로를 통해 파일에 대한 정보를 가져옵니다.

 

link(string $targetstring $link): bool

하드 링크를 생성합니다.

 

symlink(string $targetstring $link): bool

 심볼릭 링크를 생성합니다.

  • link() - 하드 링크 생성
  • readlink() - 심볼릭 링크의 대상을 반환합니다. (원본)
  • linkinfo() - 링크에 대한 정보를 가져 옵니다.
  • unlink() - 파일 삭제

 

 

파일 개별 정보 가져오기

  • fileatime — 파일의 마지막 액세스 시간을 가져 옵니다.
  • filectime — 파일의 inode 변경 시간을 가져 옵니다.
  • filegroup — 파일 그룹을 가져 옵니다.
  • fileinode — 파일 inode를 가져 옵니다.
  • filemtime — 파일 수정 시간을 가져 옵니다.
  • fileowner — 파일 소유자 가져 오기
  • fileperms — 파일 권한 을 얻습니다.
  • filesize — 파일 크기 가져 오기
  • filetype — 파일 형식 가져 오기

 

기본 검증

  • is_dir — 파일 이름이 디렉토리인지 여부를 알려줍니다.
  • is_file — 파일 이름이 일반 파일인지 여부를 알려줍니다.
  • is_link — 파일 이름이 심볼릭 링크인지 여부를 알려줍니다.
  • is_executable — 파일 이름이 실행 가능한지 여부를 알려줍니다.
  • is_readable — 파일이 존재하고 읽을 수 있는지 여부를 알려줍니다.
  • is_uploaded_file — 파일이 HTTP POST를 통해 업로드되었는지 여부를 알려줍니다.
  • is_writable — 파일 이름이 쓰기 가능한지 여부를 알려줍니다.
  • is_writeable — is_writable의 별칭

 

 

 

 

 


Filesystem

  • Predefined Constants
  • Filesystem Functions
    • basename — 경로의 후행 이름 구성요소를 반환합니다.
    • chgrp — 파일 그룹 변경
    • chmod — 파일 모드 변경
    • chown — 파일 소유자 변경
    • clearstatcache — 파일 상태 캐시를 지웁니다.
    • copy — 파일을 복사합니다.
    • delete — 연결 해제 또는 설정 해제 참조
    • dirname — 상위 디렉토리의 경로를 반환합니다.
    • disk_free_space — 파일 시스템 또는 디스크 파티션에서 사용 가능한 공간을 반환합니다.
    • disk_total_space — 파일 시스템 또는 디스크 파티션의 전체 크기를 반환합니다.
    • diskfreespace — disk_free_space의 별칭
    • fclose — 열려 있는 파일 포인터를 닫습니다.
    • fdatasync — 데이터(메타 데이터 제외)를 파일에 동기화합니다.
    • feof — 파일 포인터에서 파일 끝 테스트
    • fflush — 출력을 파일로 플러시합니다.
    • fgetc — 파일 포인터에서 문자 가져오기
    • fgetcsv — 파일 포인터에서 행을 가져오고 CSV 필드에 대한 구문 분석
    • fgets — 파일 포인터에서 라인 가져오기
    • fgetss — 파일 포인터에서 줄을 가져오고 HTML 태그를 제거합니다.
    • file_exists — 파일이나 디렉토리가 존재하는지 확인
    • file_get_contents — 전체 파일을 문자열로 읽습니다.
    • file_put_contents — 파일에 데이터 쓰기
    • file — 전체 파일을 배열로 읽습니다.
    • fileatime — 파일의 마지막 액세스 시간을 가져 옵니다.
    • filectime — 파일의 inode 변경 시간을 가져 옵니다.
    • filegroup — 파일 그룹을 가져 옵니다.
    • fileinode — 파일 inode를 가져 옵니다.
    • filemtime — 파일 수정 시간을 가져 옵니다.
    • fileowner — 파일 소유자 가져 오기
    • fileperms — 파일 권한 을 얻습니다.
    • filesize — 파일 크기 가져 오기
    • filetype — 파일 형식 가져 오기
    • flock — 이동 가능한 자문 파일 잠금
    • fnmatch — 패턴에 대해 파일 이름 일치
    • fopen — 파일 또는 URL을 엽니 다.
    • fpassthru — 파일 포인터에 남아 있는 모든 데이터 출력
    • fputcsv — 행을 CSV로 형식화하고 파일 포인터에 쓰기
    • fputs — fwrite의 별칭
    • fread — 바이너리 안전 파일 읽기
    • fscanf — 형식에 따라 파일의 입력을 구문 분석합니다.
    • fseek — 파일 포인터 찾기
    • fstat — 열린 파일 포인터를 사용하여 파일에 대한 정보를 가져 옵니다.
    • fsync — 파일의 변경 사항을 동기화합니다(메타 데이터 포함).
    • ftell — 파일 읽기/쓰기 포인터의 현재 위치를 반환합니다.
    • ftruncate — 파일을 주어진 길이로 자릅니다.
    • fwrite — 이진 안전 파일 쓰기
    • glob — 패턴과 일치하는 경로 이름 찾기
    • is_dir — 파일 이름이 디렉토리인지 여부를 알려줍니다.
    • is_executable — 파일 이름이 실행 가능한지 여부를 알려줍니다.
    • is_file — 파일 이름이 일반 파일인지 여부를 알려줍니다.
    • is_link — 파일 이름이 심볼릭 링크인지 여부를 알려줍니다.
    • is_readable — 파일이 존재하고 읽을 수 있는지 여부를 알려줍니다.
    • is_uploaded_file — 파일이 HTTP POST를 통해 업로드되었는지 여부를 알려줍니다.
    • is_writable — 파일 이름이 쓰기 가능한지 여부를 알려줍니다.
    • is_writeable — is_writable의 별칭
    • lchgrp — 심볼릭 링크의 그룹 소유권 변경
    • lchown — symlink의 사용자 소유권 변경
    • link — 하드 링크 만들기
    • linkinfo — 링크에 대한 정보를 가져 옵니다.
    • lstat — 파일 또는 심볼릭 링크에 대한 정보 제공
    • mkdir — 디렉토리를 만듭니다.
    • move_uploaded_file — 업로드된 파일을 새 위치로 이동합니다.
    • parse_ini_file — 구성 파일 구문 분석
    • parse_ini_string — 구성 문자열 구문 분석
    • pathinfo — 파일 경로에 대한 정보를 반환합니다.
    • pclose — 프로세스 파일 포인터를 닫습니다.
    • popen — 프로세스 파일 포인터를 엽니 다.
    • readfile — 파일을 출력합니다.
    • readlink — 심볼릭 링크의 대상을 반환합니다.
    • realpath_cache_get — 실제 경로 캐시 항목 가져오기
    • realpath_cache_size — 실제 경로 캐시 크기 가져오기
    • realpath — 정규화된 절대 경로 이름을 반환 합니다.
    • rename — 파일 또는 디렉터리의 이름을 바꿉니다.
    • rewind — 파일 포인터의 위치를 ​​되감습니다.
    • rmdir — 디렉토리 제거
    • set_file_buffer — stream_set_write_buffer의 별칭
    • stat — 파일에 대한 정보 제공
    • symlink — 심볼릭 링크를 생성합니다.
    • tempnam — 고유한 파일 이름으로 파일 생성
    • tmpfile — 임시 파일을 생성합니다.
    • touch — 파일의 액세스 및 수정 시간 설정
    • umask — 현재 umask를 변경합니다.
    • unlink — 파일을 삭제합니다.

 

'오늘도 개발자 > PHP' 카테고리의 다른 글

[PHP]Output Buffering Control  (0) 2022.01.30
[PHP] 스트림(Streams)  (0) 2022.01.30
[PHP] 디렉토리 제어(Directories)  (0) 2022.01.29
[PHP] JSON (JavaScript Object Notation)  (0) 2022.01.29
[PHP] cURL  (0) 2022.01.29
댓글