파일 다루기

CodeIgniter는 SplFileInfo 클래스를 래핑하고 몇 가지 편의 메서드를 추가로 제공하는 File 클래스를 제공합니다. 이 클래스는 업로드된 파일이미지의 기반 클래스입니다.

File 인스턴스 가져오기

생성자에 파일 경로를 전달하여 새 File 인스턴스를 생성합니다.

$file = new \CodeIgniter\Files\File($path);

기본적으로 파일이 반드시 존재할 필요는 없습니다. 그러나 추가 인수로 true를 전달하면 파일 존재 여부를 확인하고, 존재하지 않을 경우 FileNotFoundException()을 발생시킵니다.

Spl 활용하기

인스턴스를 얻으면 다음을 포함한 SplFileInfo 클래스의 모든 기능을 사용할 수 있습니다:

// Get the file's basename
echo $file->getBasename();
// Get last modified time
echo $file->getMTime();
// Get the true real path
echo $file->getRealPath();
// Get the file permissions
echo $file->getPerms();

// Write CSV rows to it.
if ($file->isWritable()) {
    $csv = $file->openFile('w');

    foreach ($rows as $row) {
        $csv->fputcsv($row);
    }
}

새로운 기능

SplFileInfo 클래스의 모든 메서드 외에도 몇 가지 새로운 도구를 사용할 수 있습니다.

getRandomName()

getRandomName() 메서드를 사용하면 현재 타임스탬프가 앞에 붙은 암호학적으로 안전한 무작위 파일명을 생성할 수 있습니다. 이는 파일을 이동할 때 파일명을 추측할 수 없도록 이름을 바꾸는 데 특히 유용합니다:

// Generates something like: 1465965676_385e33f741.jpg
$newName = $file->getRandomName();

getSize()

파일 크기를 바이트 단위로 반환합니다:

$size = $file->getSize(); // 256901

파일이 존재하지 않거나 오류가 발생하면 RuntimeException이 발생합니다.

getSizeByUnit()

버전 4.6.0부터 폐지됨.

파일 크기를 기본적으로 바이트 단위로 반환합니다. 첫 번째 매개변수로 'kb' 또는 'mb'를 전달하면 각각 키비바이트 또는 메비바이트로 결과를 얻을 수 있습니다:

$bytes     = $file->getSizeByUnit(); // 256901
$kilobytes = $file->getSizeByUnit('kb'); // 250.880
$megabytes = $file->getSizeByUnit('mb'); // 0.245

파일이 존재하지 않거나 오류가 발생하면 RuntimeException이 발생합니다.

getSizeByBinaryUnit()

Added in version 4.6.0.

파일 크기를 기본적으로 바이트 단위로 반환합니다. 첫 번째 매개변수로 다양한 FileSizeUnit 값을 전달하면 각각 키비바이트, 메비바이트 등으로 결과를 얻을 수 있습니다. 두 번째 매개변수로 정밀도 값을 전달하여 소수점 자릿수를 정의할 수 있습니다.

$bytes     = $file->getSizeByBinaryUnit(); // 256901
$kibibytes = $file->getSizeByBinaryUnit(FileSizeUnit::KB); // 250.880
$mebibytes = $file->getSizeByBinaryUnit(FileSizeUnit::MB); // 0.245

파일이 존재하지 않거나 오류가 발생하면 RuntimeException이 발생합니다.

getSizeByMetricUnit()

Added in version 4.6.0.

파일 크기를 기본적으로 바이트 단위로 반환합니다. 첫 번째 매개변수로 다양한 FileSizeUnit 값을 전달하면 각각 킬로바이트, 메가바이트 등으로 결과를 얻을 수 있습니다. 두 번째 매개변수로 정밀도 값을 전달하여 소수점 자릿수를 정의할 수 있습니다.

$bytes     = $file->getSizeByMetricUnit(); // 256901
$kilobytes = $file->getSizeByMetricUnit(FileSizeUnit::KB); // 256.901
$megabytes = $file->getSizeByMetricUnit(FileSizeUnit::MB); // 0.256

파일이 존재하지 않거나 오류가 발생하면 RuntimeException이 발생합니다.

getMimeType()

파일의 미디어 타입(MIME 타입)을 가져옵니다. 파일 타입을 결정할 때 가능한 한 안전한 것으로 간주되는 방법을 사용합니다:

$type = $file->getMimeType();

echo $type; // image/png

guessExtension()

신뢰할 수 있는 getMimeType() 메서드를 기반으로 파일 확장자를 결정하려 시도합니다. MIME 타입을 알 수 없는 경우 null을 반환합니다. 이는 단순히 파일명이 제공하는 확장자를 사용하는 것보다 더 신뢰할 수 있는 방법입니다. 확장자를 결정하기 위해 app/Config/Mimes.php의 값을 사용합니다:

// Returns 'jpg' (WITHOUT the period)
$ext = $file->guessExtension();

파일 이동

각 파일은 move() 메서드를 사용하여 새 위치로 이동할 수 있습니다. 첫 번째 매개변수로 파일을 이동할 디렉터리를 전달합니다:

$file->move(WRITEPATH . 'uploads');

기본적으로 원래 파일명이 사용됩니다. 두 번째 매개변수로 전달하여 새 파일명을 지정할 수 있습니다:

$newName = $file->getRandomName();
$file->move(WRITEPATH . 'uploads', $newName);

move() 메서드는 이동된 파일에 대한 새 File 인스턴스를 반환하므로, 결과 위치가 필요한 경우 반환값을 반드시 저장해야 합니다:

$file = $file->move(WRITEPATH . 'uploads');