2012-03-21 14 views
0

私は常に以下のコードを使用してApacheサーバにフォルダを作成しましたが、最近、パーミッション拒否エラーが発生したサーバの1つにあります。インターネット上ApacheサーバのHttpdファイルのパーミッション

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0777, true); 
    chmod('img/user/'.$id, 0777); 
} 

私はそれをhttpdのために、このようなneeds to have write permissionsディレクトリをアップロードすることを発見した:この権限が設定されている

drwxrwxrwx 2 user  staff 512 Jan 07 12:32 uploads/ 

を?私はサーバーに直接アクセスしません。別の方法がありますか?

+0

FTPを使用してアクセス許可を設定できる場合があります。 – PeeHaa

答えて

1

あなたがそれを避けることができれば、またはそのようなことについても読めるように、あなたは世界の書き込み可能になることは決してありません。まだ少し広い場合は、0770が良い選択肢になります。要点は、問題のフォルダがWebサーバーユーザーによって書き込み可能である必要があることです。例えば、多くのウェブホスト上のApacheは、ユーザーnobodyによって実行されるので、より適切な権限は次のようになります:あなたが権限を自分で設定するための直接アクセスを得ることができない場合

drwxrwx--- 2 nobody  nobody 512 Jan 07 12:32 uploads/ 

は今、問題があります一部のWebホストではchmodや他のアクセス許可や所有権の変更をPHP内から実行できないため、PHPを除きます。つまり、cPanelを使用している場合は、オンラインファイルマネージャを使用して、適切なディレクトリを参照し、ページの上部にあるchange permissionsを使用して目的を達成することができます。

究極的に必要なものは次のとおりです。特定の場所にディレクトリを作成する必要がある場合は、その場所がWebサーバーによって書き込み可能であることを確認する必要があります。あなたの例では、img/user/$idを作成する前に、img/userに適切なアクセス許可を最初に設定する必要があることを意味します。これは、img/user0770のアクセス許可を持っていて、nobody:nobody(このコンテキストではユーザーまたはグループがどちらでもかまいません)、または両方が必要でないか、またはアクセス許可が0777である必要があります。それはすでに適切なユーザによって所有され、あなたはすでに、単にあなたのためにそれへの書き込みアクセス権を持っているだろうから...

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0770, true); 
} 

:あなたは、特定のユーザーディレクトリを作成するときに、あなたはそうのようにそれを行うことができますWebサーバーは最初にそれを作成しました。

PHP以外の方法で見つけることができない場合は、あなたのウェブホストを手助けする必要があります。

+0

ありがとう@ジェイソン.. –

0

PHPはユーザとして実行されます:グループ内のwww-data:www-data(Ubuntu)またはサーバのOSに依存します。 FTPで自分でできない場合は、プロバイダにマップ/ファイルへの適切なアクセスを設定するよう依頼することができます。

関連する問題