1. ホーム
  2. php

file_put_contents()を実行するとフォルダが作成される

2023-12-22 18:35:32

質問

私はウェブサイトから多くの画像をアップロードしており、より良い方法でファイルを整理する必要があります。 したがって、私は月ごとにフォルダを作成することにしました。

$month  = date('Yd')
file_put_contents("upload/promotions/".$month."/".$image, $contents_data);

を試したところ、エラーが発生しました。

Message: file_put_contents(upload/promotions/201211/ang232.png): ストリームを開くのに失敗しました。そのようなファイルまたはディレクトリはありません

既存のフォルダにファイルのみを配置しようとすると、うまくいきました。しかし、新しいフォルダの作成に失敗しました。

この問題を解決する方法はありますか?

どのように解決するのですか?

file_put_contents() はディレクトリ構造を作成しません。ファイルのみです。

をテストするために、スクリプトにロジックを追加する必要があります。 ディレクトリが存在するかどうかをテストするためのロジックを追加する必要があります。存在しない場合は mkdir() を最初に使用します。

if (!is_dir('upload/promotions/' . $month)) {
  // dir doesn't exist, make it
  mkdir('upload/promotions/' . $month);
}

file_put_contents('upload/promotions/' . $month . '/' . $image, $contents_data);

更新しました。 mkdir() は第3パラメータとして $recursive で、これは 任意の を作成します。複数のディレクトリを作成する必要がある場合に便利かもしれません。

再帰的でディレクトリのパーミッションが777に設定された例。

mkdir('upload/promotions/' . $month, 0777, true);