2012-01-25 5 views
0

に私は最近、質問尋ねます:私は作成しようとしています何Write over a htaccess file?PHPはサブフォルダにファイルを書いていないが、Webルート

は、友人のためのCMSシステムであるが、前記システム上の任意のftpの詳細を格納せずに(同様に他の多くの既存のシステムでは、cushy cmsなどがあります.NBシステムでは、メンバーが自分のサーバーにログインしてから自分のサーバーにファイルを転送する必要があります)。

クライアントサーバーのサーバーにconfig.phpがあります。 config.phpが命令を受け取ると、自分のサーバ(私のcmsシステム)からそのWebルート内のフォルダに新しいファイルを書き込もうとします。これはphp関数fopenで行います。

このシステムをテストしたいくつかのサーバーでは、config.phpはそのサブフォルダにアクセス許可がある場合を除いて、ファイルをWebルート内のサブフォルダに書き込むことができません。上記の投稿では、両方の応答がこれをしないことを強く示唆しました。(すなわち、777を設定しないように)

もう一度クイックテストを行ったので、クライアントのサーバ上に同じconfig.phpが書き込めますWebroot(この場合は 'public_html')に移動します。

質問

どのようにすることができますパスでのPHPスクリプト:。 $ _SERVER [ 'DOCUMENT_ROOT'] '/ cmssystem/config.phpの';など

(permisions 777なし)のフォルダに書き込むことはできません:。 $ _SERVER [ 'DOCUMENT_ROOT'] '/ cmssystem /ファイル/';

ただし、document_rootに同じファイルを書き込むことはできますか?これはほとんどのサーバーでも同じでしょうか?

+1

どのユーザーがそのフォルダを所有していますか?ユーザーがApacheを実行している(これがあなたのサーバであると仮定します)、そのフォルダへの書き込みアクセス権を持っていますか? – afuzzyllama

+0

Ah ok .. yea .. thx :)フォルダ "cmssystems"は、config.phpとさらにサブフォルダ "files"を含むフォルダです。 "cmssystems"フォルダは通常、ftpアカウント(通常はfilezilla経由)でユーザによって作成され、そのフォルダの所有者とグループはftpユーザです... これが次にPHPプログラム(つまり、apacheユーザ)は "cmssystems"フォルダにファイルを書き込めませんか? もしそれが意味をなさないなら、私は、Apacheのユーザー名が通常このディレクトリに書き込めるように、$ _SERVER ['DOCUMENT_ROOT']にすべてのファイルを書き込むと思います。 – John

答えて

3

これは本当に一般的な問題です。ここで起こっているのは、suPHPが有効になっているサーバー(suExecとも呼ばれます)を使用しているサーバーが稼働していて、PHPがホスティングアカウントを所有するユーザーとして実行されるということです。一般的に、書き込みたいフォルダの所有者と同じユーザーであれば、そのフォルダに書き込む権限は755だけ必要です。

しかし、ホスティング会社の中には、PHPが一般ユーザー(nobody、apacheなど)として実行する方が安全だと思う人もいます。これは、PHPが実行されていることを意味します。そのフォルダにある他のグループはそのディレクトリに書き込めるように書き込み権限(すなわち777)が必要です。

問題のあるアカウントのアクセス許可を変更したり、ホスティング会社を変更したりする以外に、これを回避する方法はあまりありません。

希望に役立ちます!

よろしくお願いします。 Phil、

+0

Ok、うーん、大きなcmsシステムがftpを使ってファイルをサーバーにプッシュする理由を説明しています...助けてくれてありがとう。とても有難い。 – John

+0

これは、PHPが常にWebルートに書き込むことができるということですか? (また、私は良い答えに向かって試してみましたが、これを行うにはstackoverflowのメンバーも新しくなっています) – John

+0

残念ながら、Apacheのユーザーは書き込み権限を持っているディレクトリに書き込むことができません。ウェブルート。 Webrootを777に一時的に設定することもできますが、 "output"サブディレクトリを作成し、Webrootを755にリセットするスクリプトを実行してください。 "output"ディレクトリはApacheによって所有され、755として書き込み可能ですが、FTPそのフォルダまたはその内容を変更または削除することはできません。 – Philthi

関連する問題