- ベストアンサー
ディレクトリのパーミションを確認
スクリプトのログファイルを生成するために、ディレクトリのパーミションを確認したいのですが、よい方法などございますでしょうか? is_writable() is_wtiteable() fileperms() ともに、ディレクトリではなくファイルのパスを指定しなければいけないようなのですが、ディレクトリのCHMOD のチェックなどできるのでしょうか? どうぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Warning: chmod(): Operation not permitted in /home/public_html/test/chmod.php on line 5 指定したディレクトリのパーミッションを変更する権限がない、というエラーですね。 WebサーバがApacheだと想定して回答します。 Apacheのhttpdプロセスは通常rootでなく、専用ユーザ(通常はapache)ユーザで実行されてます。 (ps aux|grep httpd で確認できます) ディレクトリのパーミッションを行うためには、確かそのディレクトリのオーナーであるユーザ(あるいはrootだったかな)でないと無理だったかと思います。(他のユーザが勝手に書き込み権限を与えることができると、セキュリティの意味がありませんから) したがって、 /home/public_html/test のオーナーを、rootでログインした後、chownを使ってapacheをオーナーにすれば、chmodできるようになるのではないかと思います。
その他の回答 (2)
- ham_kamo
- ベストアンサー率55% (659/1197)
ls -ld /home/public_html/test でディレクトリのオーナー(及びパーミッションも)を確認できます。 それで、先の回答ではアドバイスとして少し誤った回答をしてしまったような気がするので訂正、というか補足(というか蛇足かも)です。 とりあえず、先の回答で「chmodできないならそのディレクトリのオーナーを変えればいい」というのはちょっと筋が違いました。「書き込めないなら、ログファイルが書き込めるように、そのディレクトリのオーナーにchmodしてもらう(書き込み権限を許可してもらう)」というのが筋が通っている気がします。 それで、chmodをPHPのスクリプトで行おうとしているのがよくわかりません。なぜなら、ログを書き込めるようにパーミッションの設定をするのは、初期設定の段階で一度やればいいはずで、それはtelnetなりsshなりでログインしてUNIXのchmodコマンドを1回叩けばいいはずなので。(あるいはFTPで行うか) 質問文のPHPスクリプトは、Webからのアクセスがあるたびにログファイルが書き込めるかパーミッションをチェックして、書き込みができなかったらパーミッションを変更する、ということなのでしょうか。それとも、上に書いた「初期設定」をPHPのスクリプトで行おうとしているのでしょうか。その辺を明確にしていただくと、より具体的なアドバイスができるかもしれません。(できないかもしれませんが…)
お礼
>Webからのアクセスがあるたびにログファイルが書き込めるかパーミッションをチェックして、書き込みができなかったらパーミッションを変更する、ということなのでしょうか。 そうです。 しかし、少し無理っぽいのであきらめることにします。ありがとうございました。またお返事が遅くなり申し訳ございませんでした。
- ham_kamo
- ベストアンサー率55% (659/1197)
下記URLによると、「引数filenameはディレクトリ名とすることができ」るそうなんですが…。(自分では試してないので自信なし) http://www.php.net/manual/ja/function.is-writable.php http://www.php.net/manual/ja/function.is-readable.php fileperms() も下記URLの例1.8を見ると、/tmpの属性をチェックしているので、ディレクトリ名を指定できるようです。 http://jp2.php.net/manual/ja/function.fileperms.php
お礼
ありがとうございます。仰るとおり再度確認してみましたところ、ディレクトリのパーミションもチェックできました。 この機能の関連でおたずねしたいのですが、パーミションを変更するchmod() を使用した際、以下のコードで次のようなエラーが出ます。なぜパーミションの変更ができないかわかりますでしょうか? Warning: chmod(): Operation not permitted in /home/public_html/test/chmod.php on line 5 chmod.php <? $path = '/home/public_html/test'; $chmod = substr(sprintf('%o', fileperms($path)), -4); if(!strstr($chmod, '777')){ chmod($path, '777'); } ?> どうぞよろしくお願いいたします。
お礼
ありがとうございます。使用しているWebサーバはApache2です。 ディレクトリのオーナーを確認しようと思い、 echo get_current_user() . '<br />'; echo posix_getlogin(). '<br />'; とすると、それぞれ別々の結果が返ってきます。posix_getlogin()のほうはrootを返すのですが、get_current_user() は ftpなどで設定しているアカウントユーザー名になっています。 また、使用しているOSが FreeBSD なのですが、以下コマンドを打つとそれぞれ違う結果が返ってきます。 whoami -> www logname -> root ディレクトリのオーナーを確認する方法などありましたらどうぞよろしくお願いいたします。