• ベストアンサー

PHPでchmod()を使えるようにする方法

サーバー初心者です。ご存じの方おられましたら教えて頂けたら嬉しいです。 PHPでchmod()をすると、 Operation not permitted というエラーが表示されます。 apacheにその権限が無いと思うのですが、 こういった場合はどのように対応したらいいのでしょう。。 環境は CentOS5.3 PHP5.3 になります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • virdman
  • ベストアンサー率81% (9/11)
回答No.3

apache から PHP を実行する場合は、実行ユーザが apache となります。 よって、chmod() 対象のファイルまたはディレクトリに apache ユーザーが操作できる権限がついていない場合に、エラーが表示されます。 エラーを回避するには、以下のような方法が考えられます。 1. 操作対象のファイルまたはディレクトリに、最初からapache ユーザが操作できる権限を付与しておく 2. 下の方が回答しているとおり、system() 関数経由で sudo chmod コマンドを使って、root 権限等で chmod コマンドが実行されるようにする 3. suEXEC を利用する。 PHP の chmod 関数については、以下を参考にしてください。 http://jp.php.net/manual/ja/function.chmod.php PHP の system 関数については、以下を参考にしてください。 http://jp2.php.net/manual/ja/function.system.php Linux の sudo コマンドの使い方については、以下を参考にしてください。 http://linux.kororo.jp/cont/intro/sudo.php Linux の chmod コマンドについては、以下を参考にしてください。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230728/ suEXEC については、以下を参考にしてください。 https://httpd.apache.org/docs/2.0/ja/suexec.html

gogoyamada
質問者

お礼

大変詳細にご回答いただきましてありがとうございます! リンク先を拝見しましたが、とてもわかりやすかったで。 解決の糸口がつかめました。助かります!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

system()系の関数で、sudoとからめてosのchmodを実行してやるのが妥当です。 ただWEB技術でパーミッションをいじる仕様が本当に必要なのかは 疑問が残りますが

gogoyamada
質問者

お礼

ありがとうございます!すいません、sudoがよくわかっていないので、調べてみたいと思います。

回答No.1

ファイルまたはディレクトリの所有者がchmodをかけたユーザーではないのでは? その場合は所有者をchmodのユーザーにするか、chmodのユーザーでファイルまたはディレクトリを作成するかになると思います。 root権限であれば基本的にどのファイル及びディレクトリの権限も変えられますがあまりお勧めは出来ませんので、PHPを実行する適当なユーザー(仮にAとします)を作って、Aでファイルやディレクトリを作成するようにすればよいかと。

gogoyamada
質問者

お礼

早速ご回答いただきましてありがとうございます! おっしゃる通り、ファイル所有者(A)と実行者(apache)は違います。さくらインターネットの共用サーバーではきちんと動くのですが、これはアクセスされるURLによってapacheの実行ユーザーが変わっているということでしょうか?それに近いことができたらいいなと思っていますが、もしご存じでしたら教えて頂けたらありがたいです。厚かましいですが、よろしくお願いします。

関連するQ&A