ftruncate

関数の概要

ftruncate は、PHPで開いたファイルポインタが指すファイルのサイズを指定した長さに切り詰めるための関数です。これにより、ファイルのサイズを縮小したり、不必要な部分を削除したりすることができます。ファイルを新しいサイズに切り詰めると、切り捨てられた部分のデータは失われます。

パラメータの説明

  • resource $stream:サイズを変更したいファイルのポインタ。fopenなどで開いたファイルリソースを指定します。
  • int $length:ファイルを切り詰める新しいバイト単位の長さ。現在のファイルサイズより小さい値を指定すると切り詰め、それより大きい場合は不足分をゼロバイトで埋めます。

戻り値

ftruncate は成功した場合に true、失敗した場合に false を返します。ファイルサイズの変更に失敗するときは例えば、無効なファイルリソースが渡された場合やアクセス権限が不足している場合などです。

使用例

基本的な使い方

$fp = fopen('sample.txt', 'r+');
if ($fp !== false) {
    // ファイルサイズを50バイトに切り詰める
    if (ftruncate($fp, 50)) {
        echo "ファイルサイズを50バイトに切り詰めました。";
    } else {
        echo "ファイルサイズの切り詰めに失敗しました。";
    }
    fclose($fp);
} else {
    echo "ファイルを開けませんでした。";
}

この例では、ファイルを読み書きモードで開き、サイズを50バイトに切り詰めています。

ファイルサイズを拡張するときの挙動

$fp = fopen('sample.txt', 'r+');
if ($fp !== false) {
    // ファイルサイズを100バイトに拡張(不足分はNULLバイトで埋められる)
    if (ftruncate($fp, 100)) {
        echo "ファイルサイズを100バイトに拡張しました。";
    } else {
        echo "ファイルサイズの拡張に失敗しました。";
    }
    fclose($fp);
}

この例では、現在のファイルサイズより大きなサイズを指定しています。この場合、不足部分はNULLバイト()で埋められます。

書き込み後に余分な部分を削除する例

$fp = fopen('log.txt', 'w+');
if ($fp !== false) {
    fwrite($fp, "新しいログデータ");
    fflush($fp); // 書き込み内容を確実に反映
    // 書き込んだ部分以外のファイルを切り詰める
    ftruncate($fp, ftell($fp));
    fclose($fp);
    echo "古いデータを削除し、ファイルサイズを調整しました。";
}

ログファイルなどで、新しい内容を書き込んだ後に、元々ファイルにあった余分な部分を削除したい時に便利です。ftell で現在の書き込み位置を取得し、そこを新しいファイルサイズに指定しています。

関連する関数

  • fopen:ファイルを開く
  • fclose:ファイルを閉じる
  • fwrite:ファイルに書き込む
  • ftell:ファイルポインタの位置を取得する
  • fflush:ファイルへの出力バッファをフラッシュする

まとめ

ftruncate は、PHPでファイルのサイズを自由に切り詰めたり拡張したりするための便利な関数です。ファイルの不要な部分を削除してファイルサイズを小さくしたい場合や、特定のサイズに揃えたい場合に役立ちます。ファイルポインタを正しく用意し、適切な長さを指定することで確実に操作が行えます。ファイル操作の際の基本的な関数と組み合わせて使うことで、実務でも効果的に活用可能です。