PHPコーディング

パーミッションの変更

2009年11月21日
PHPからファイルのパーミッションを変更する方法です。

まずは、現在の8進形式のパーミッションの取得から。
$file_path = "パーミッションを取得したいファイルパス";
$now = substr(sprintf('%o', fileperms($file_path)), -4);
これで、【0755】や【0644】などが返ってきます。

次に、パーミッションの設定です。
$permission = 0600;
$file_path = "パーミッションを変更したいファイルパス";
$result = @chmod($file_path, intval($permission, 8));

本当に設定できたか確認。
$after = substr(sprintf('%o', fileperms($file_path)), -4);

しかし、この流れだと問題が起こります。
ファイル情報がキャッシュされるので、パーミッションが無事変更できたとしても、$afterには$nowと同じ値が返ってきます。

そこで、キャッシュ情報をクリアします。関数【clearstatcache】をコールするだけです。

$file_path = "パーミッションを取得したいファイルパス";
$now = substr(sprintf('%o', fileperms($file_path)), -4);

clearstatcache();

$permission = 0600;
$file_path = "パーミッションを変更したいファイルパス";
$result = @chmod($file_path, intval($permission, 8));

$after = substr(sprintf('%o', fileperms($file_path)), -4);

これでOKです。