Help us understand the problem. What is going on with this article?

ファイル作成時に途中のディレクトリが存在しなくても作成してくれるメソッド

More than 3 years have passed since last update.

あるファイルを作成したいといった場合に、素直にtouchなんかでファイルを作成したくても途中のディレクトリが存在しないためエラーになってしまうということがあったりします。
なので、パスに含まれるディレクトリの存在をチェックし、無ければ合わせてそのディレクトリも作成するメソッドを作ってみました。

ファイルまたはディレクトリの両方を作成できますが、ディレクトリを作成したい場合は引数のパスの最後に/をつける必要があります。
/path/to/barならbarファイルができますが、/path/to/bar/ならbarディレクトリを作成します。

function createFile($file)
{
    // ファイルが既に存在する場合
    if (!empty($file) && is_readable($file)) {
        return true;
    } else {
        // 最後がスラッシュで終わる場合
        if (substr($file, -1) === '/') {
            return mkdir($file, 0777, true);
        } else {
            $path = pathinfo($file);
            // ディレクトリがあればファイルだけ作成、無ければディレクトリ+ファイルを作成
            return is_readable($path['dirname']) ? touch($file) : (mkdir($path['dirname'], 0777, true) && touch($file));
        }
    }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away