[php]stat

stat 함수

stat 함수는 PHP에서 파일에 대한 정보를 반환하는 함수입니다. 파일의 상태에 관한 다양한 정보를 배열로 반환하며, 파일 크기, 수정 시간, 소유자, 그룹 등의 정보를 얻을 수 있습니다.

사용법:

array stat ( string $filename )
  • $filename: 정보를 얻고자 하는 파일의 경로입니다.

예제:

$file = 'example.txt';
$fileInfo = stat($file);
print_r($fileInfo);

stat 함수를 응용한 코드

1. 파일의 크기와 수정 시간 출력하기

$file = 'example.txt';
$fileInfo = stat($file);

if ($fileInfo) {
    echo 'File size: ' . $fileInfo['size'] . ' bytes' . PHP_EOL;
    echo 'Last modified: ' . date('Y-m-d H:i:s', $fileInfo['mtime']) . PHP_EOL;
} else {
    echo 'Failed to get file information.';
}

stat 함수와 다른 함수 사용하여 응용하는 코드

2. 디렉토리 내 파일의 정보 출력하기

$directory = './files/';
if (is_dir($directory)) {
    $files = scandir($directory);
    foreach ($files as $file) {
        if ($file !== '.' && $file !== '..') {
            $filePath = $directory . $file;
            $fileInfo = stat($filePath);
            echo 'File: ' . $file . PHP_EOL;
            echo 'File size: ' . $fileInfo['size'] . ' bytes' . PHP_EOL;
            echo 'Last modified: ' . date('Y-m-d H:i:s', $fileInfo['mtime']) . PHP_EOL;
            echo PHP_EOL;
        }
    }
}

stat 함수와 조건문, 반복문 사용하는 샘플 코드

3. 디렉토리 내 파일 중 가장 큰 파일 찾기

$directory = './files/';
$maxFileSize = 0;
$maxFile = '';

if (is_dir($directory)) {
    $files = scandir($directory);
    foreach ($files as $file) {
        if ($file !== '.' && $file !== '..') {
            $filePath = $directory . $file;
            $fileInfo = stat($filePath);
            if ($fileInfo['size'] > $maxFileSize) {
                $maxFileSize = $fileInfo['size'];
                $maxFile = $file;
            }
        }
    }
}

if ($maxFile) {
    echo 'The largest file is: ' . $maxFile . PHP_EOL;
    echo 'File size: ' . $maxFileSize . ' bytes';
} else {
    echo 'No files found in the directory.';
}

성능 향상을 위한 팁

  • stat 함수는 파일 정보를 얻기 위해 파일 시스템에 I/O 작업을 수행합니다. 파일 정보를 반복적으로 얻어와야 할 때는 가능한한 불필요한 호출을 줄이고, 캐싱 등의 기법을 활용하여 성능을 개선할 수 있습니다.
  • 대량의 파일 정보를 처리해야 할 때는 적절한 방법을 선택하여 효율적으로 처리해야 합니다. 예를 들어 병렬 처리, 배치 작업, 쿼리 최적화 등의 방법을 고려할 수 있습니다.