ディレクトリの名前を変更しようとすると、PHPで「許可が拒否された」のはなぜですか?

StackOverflow https://stackoverflow.com/questions/196114

  •  10-07-2019
  •  | 
  •  

質問

ディレクトリの内容と同じように、ディレクトリを777にchmodしました。それでも、「許可が拒否されました」というメッセージが表示されます。エラー。ファイルの許可に関係なく、Apacheがグループ/所有者でない場合、PHPはこのエラーをスローしますか?失敗した呼び出しは次のとおりです。

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
役に立ちましたか?

解決

上位レベルのディレクトリを編集しているため、PHPユーザーはそのディレクトリへの書き込みアクセス権が必要です。

他のヒント

これはおそらく、apacheが親ディレクトリの所有者ではないためです。ファイルの名前を変更(または移動)することは、基本的に新しいファイルを作成することと同じです。

明確にするために、phpは実際の所有権を持つディレクトリのみを名前変更できます:

-rwxrwxrwx user   user   temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user   user   script.php

script.phpがこれら2つのディレクトリの名前を変更しようとしていると仮定します:

// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions    
rename('temp', 'temp.bak');

// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak'); 

次のスクリプトを実行してみてください:

print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));

そしてそれが何を返すかを見てください。

この種の状況に役立つもう1つのことは、実際に許可を下げることです。アクセス許可の設定が high であるため、Apacheがアプリケーションのアクセス許可を拒否する場合があります。私の推測では、これは優れたセキュリティ慣行を促進するためのものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top