PHPでのmkdir() : Permission deniedの有効的な対処法

こういう場面に遭遇

  • 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の解決策でした。

ではまた。バイバイ(^^)/~~~

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください