PHPテキストファイルの改行コード検出

テキストファイルの改行コードの検出方法を考えてみました。
単純にファイルの先頭を数MB 読んで改行コードを判定する方法です。
改行コードが混在してたり、バイナリファイルだと正しく検出できません。

echo detectEOL("/tmp/test.txt");

function detectEOL($file) {
    if (!file_exists($file)) {
        return null;
    }

    $fpsrc = fopen($file, "r");
    if (!$fpsrc) {
        return null;
    }

    $chunk = fread($fpsrc, 10*1024);
    fclose($fpsrc);

    if (empty($chunk)) {
        return null;
    }

    if (substr_count($chunk, "\r\n")) {
        return '\r\n';
    }

    if (substr_count($chunk, "\r")) {
        return '\r';
    }

    return '\n';
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です