ファイル操作

CodeIgniterは、SplFileInfoクラスをラップし、いくつかの便利な追加メソッドを提供するFileクラスを提供します。このクラスは、アップロードされたファイル画像の基本クラスです。

Fileインスタンスの取得

コンストラクタにファイルのパスを渡すことで、新しいFileインスタンスを作成します。デフォルトでは、ファイルは存在する必要はありません。ただし、追加の引数として「true」を渡して、ファイルが存在するかどうかを確認し、存在しない場合はFileNotFoundException()をスローすることができます。

<?php

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

Splの活用

インスタンスを取得すると、次のものを含むSplFileInfoクラスのすべての機能を利用できます。

<?php

// 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()メソッドを使用して、現在のタイムスタンプが先頭に追加された暗号的に安全なランダムファイル名を生成できます。これは、ファイル名を推測できないようにファイルを移動するときに名前を変更するのに特に便利です。

<?php

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

getSize()

アップロードされたファイルのサイズをバイト単位で返します

<?php

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

getSizeByUnit()

アップロードされたファイルのサイズをデフォルトでバイト単位で返します。キロバイトまたはメガバイト単位で結果を取得するには、最初のパラメータとして「kb」または「mb」を渡すことができます。

<?php

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

getMimeType()

ファイルのメディアタイプ(MIMEタイプ)を取得します。ファイルの種類を判断する際に、可能な限り安全であるとみなされるメソッドを使用します。

<?php

$type = $file->getMimeType();

echo $type; // image/png

guessExtension()

信頼できるgetMimeType()メソッドに基づいて、ファイルの拡張子を判別しようとします。MIMEタイプが不明な場合は、nullを返します。これは、ファイル名によって提供される拡張子を使用するよりも、多くの場合、より信頼できるソースです。拡張子を決定するために、app/Config/Mimes.phpの値を使用します。

<?php

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

ファイルの移動

各ファイルは、適切な名前のmove()メソッドを使用して新しい場所に移動できます。これは、ファイルの移動先のディレクトリを最初のパラメータとして受け取ります。

<?php

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

デフォルトでは、元のファイル名が使用されました。新しいファイル名を2番目のパラメータとして渡すことで指定できます。

<?php

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

move()メソッドは、再配置されたファイルの新しいFileインスタンスを返すため、結果の場所が必要な場合は結果をキャプチャする必要があります。

<?php

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