【PHP】ディレクトリ(フォルダ)の存在を確認し、なければ作成する

公開日:
更新日:
カテゴリー: PHP

PHPでディレクトリ(フォルダ)の存在を確認し、なければ任意のディレクトリを作成する方法を説明しています。

ディレクトリ(フォルダ)の存在を確認

PHPでディレクトリの存在を確認する場合、file_exists関数を使います。

file_exists(確認したいディレクトリやファイルのパス);

この関数は引数に指定したディレクトリやファイルが存在するかどうかを確認し、存在すれば「ture」存在しなければ「false」を返します。

file_exists関数の詳細はリファレンスを参照してください。

サンプルプログラム

<?php
//存在を確認したいディレクトリ(ファイルでもOK)
$directory_path = "../hoge";	//この場合、一つ上の階層に「hoge」というディレクトリが存在するか確認

//「$directory_path」で指定されたディレクトリが存在するか確認
if(file_exists($directory_path)){
	//存在したときの処理
	echo "存在します";
}else{
	//存在しないときの処理
	echo "存在しません";
}
?>

このプログラムを実行すると

  • 一つ上の階層に「hoge」ディレクトリがあれば「存在します」と出力
  • 存在しなければ「存在しません」と出力

となります。

ディレクトリ(フォルダ)の作成

PHPでディレクトリを作成する場合、mkdir関数を使います。

 mkdir(作成したいディレクトリのパス, そのディレクトリのパーミッションを指定);

この関数は、第1引数で指定されたディレクトリ(のパス)を、第2引数で指定されたパーミッションを付与して作成します(第2引数を省略した場合、デフォルトのパーミッションである「0777」が付与されます)。

ディレクトリの作成に成功すれば「ture」失敗すれば「false」を返します。

mkdir関数は第3引数や第4引数も指定できるので詳細はリファレンスを確認してください。

サンプルプログラム

<?php
//作成したいディレクトリ(のパス)
$directory_path = "../hoge";	//この場合、一つ上の階層に「hoge」というディレクトリを作成する

//「$directory_path」で指定されたディレクトリを作成する
if(mkdir($directory_path, 0777)){
	//作成に成功した時の処理
	echo "作成に成功しました";
}else{
	//作成に失敗した時の処理
	echo "作成に失敗しました";
}
?>

このプログラムを実行すると

  • 一つ上の階層に「hoge」ディレクトリを作成できれば「作成に成功しました」と出力
  • 作成に失敗すれば「作成に失敗しました」と出力

 となります。

ディレクトリの存在を確認し、なければ作成

上の二つのプログラムを組み合わせれば、「ディレクトリ(フォルダ)の存在を確認し、なければ作成する」ということが可能になります。

サンプルプログラム

<?php
//作成したいディレクトリ(のパス)
$directory_path = "../hoge";	//この場合、一つ上の階層に「hoge」というディレクトリを作成する

//「$directory_path」で指定されたディレクトリが存在するか確認
if(file_exists($directory_path)){
	//存在したときの処理
	echo "作成しようとしたディレクトリは既に存在します";
}else{
	//存在しないときの処理(「$directory_path」で指定されたディレクトリを作成する)
	if(mkdir($directory_path, 0777)){
		//作成したディレクトリのパーミッションを確実に変更
		chmod($directory_path, 0777);
		//作成に成功した時の処理
		echo "作成に成功しました";
	}else{
		//作成に失敗した時の処理
		echo "作成に失敗しました";
	}
}
?>

このプログラムを実行すると

  • 一つ上の階層に「hoge」ディレクトリが存在すれば「作成しようとしたディレクトリは既に存在します」と出力
  • 「hoge」ディレクトリが存在しない
       作成成功→「作成に成功しました」
       作成失敗→「作成に失敗しました」

 となります。

備考

上のプログラムの12,13行目にchmod関数を使っていますが、実はmkdir関数の第2引数にパーミッション「0777」を指定しても大抵の場合そのパーミッションになりません。

その原因・理由は【PHP】mkdirのパーミッション(属性)の指定が機能しない原因を参照して下さい。

 

あわせて読んでほしい!

 

コメント

1:SST:2016/09/11 1:38:41

参考になりました。
ありがとうございます。
これでFTPの場合はどうなるのでしょうか?

このようにftp_で記述してもうまくできません。
まだPHP初心者な者で教えていただけると幸いです。

2:管理人:2016/09/11 18:30:16

SSTさん

>これでFTPの場合はどうなるのでしょうか?
>このようにftp_で記述してもうまくできません。

すいません><質問の意味がよくわかりません。
詳細な内容をもう一度お願いします。

3:春男:2019/02/13 20:46:40

>これでFTPの場合はどうなるのでしょうか?
>このようにftp_で記述してもうまくできません。
質問者さんからはお返事なかったようですが、
php の ftp 関数を用いて、同様の動作(ディレクトリがなければ作る)を
実現させたいが、うまく動かないと言いたかったのではないですか?

ディレクトリの所有権の関係でディレクトリの所有者を FTP ユーザにしたい
とかの理由があったのではないかなと。

コメントフォーム
お名前
コメント