ディレクトリを作成するためには、親ディレクトリに書き込み権限が必要です。例えば、mkdir()関数を使用する場合、指定したパスの親ディレクトリに書き込み権限がないとエラーが発生します。
mkdir()関数は成功時にtrueを返し、失敗時にfalseを返します。
$parentDir = 'path/to/parent/directory'; $newDir = $parentDir . '/new_directory'; if (is_writable($parentDir)) { if (!file_exists($newDir)) { if (mkdir($newDir, 0777, true)) { echo 'ディレクトリが作成されました'; } else { echo 'ディレクトリの作成に失敗しました'; } } else { echo 'ディレクトリは既に存在します'; } } else { echo '親ディレクトリに書き込み権限がありません'; // エラーログを記録する error_log('親ディレクトリに書き込み権限がありません: ' . $parentDir); }
mkdir()関数の第三引数にtrueを指定することで、再帰的に親ディレクトリも含めて作成することができます。つまり、指定したパスの途中に存在しないディレクトリがあった場合でも、それらのディレクトリを自動的に作成してくれます。
umaskの影響でmkdirで指定したパーミッションにならないことがある:
umaskは新しく作成されるファイルやディレクトリのデフォルトのパーミッションを制限するための設定です。例えば、umaskが0022に設定されている場合、0777でディレクトリを作成しても実際には0755になります。mkdirでディレクトリを作成し、その後にchmodでパーミッションを設定して希望のパーミッションにする。