こういう場面に遭遇
- mkdir()でディレクトリ作成
- 返り値は特に false を返さない
- なのにディレクトリができない・・
サーバーにはapacheを使ってます。
この問題の対処がググっても出なくて困りました。
そこで未来の自分へのメモとして、
PHPの mkdir:Permission deniedの対処法 を紹介。
このページの目次 [隠す]
経緯.まず問題が起こった簡単な経緯から...
こういうコードを書いてました。
▼ こんなエラーが
通常 mkdir() は成功したかどうかを true または false で返すので、詳細エラーを見たいときは error_get_last() を使えばメッセージを取得できます。それで Permission denied というエラーを発見したわけです。
この対処法には2つあります。
対処法1.パーミッションを0777にしてしまう
1つめは少し強引な対処法です。
ディレクトリのパーミッションを0777にすればOK
作成するディレクトの親に対しての操作ですね。
▼ このようなコマンドを実行
これで一応解決できます。
ただあんまりいい方法ではないかも・・・
まずパーミッションを 0777 にした時点でセキュリティ的に危なすぎるし、これは参考として一応紹介しておきます。(試さない方がグッド)
対処法2.apacheにディレクトリへの所有権を与える
もう1つの方法はapacheに所有権を与えること
作成したい親ディレクトリに対してapacheが所有権を持っていない場合、PHPから mkdir() しようとすると Permission Denided と出てしまいます。そこで apache に対象ディレクトリへの所有権を持たせてしまう、という解決策ですね。
次のようなコマンドで所有権付与できます。
▼ apacheにhogeへの所有権付与
▼ これで次コードが動くように・・
パーミッションを弄らなくていいので安全
これが一番現実的な解決策と思われます。
まとめ - mkdir() Permission denideの解決は簡単
最後にまとめておきます。
当然ながら1つめの方法はよくありません。Apacheでサーバーを立ててるなら、chownコマンドでディレクトリ所有権を与えるのが現実的ですね。
以上、mkdir() Permission deniedの解決策でした。
ではまた。バイバイ(^^)/~~~