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です。
まずは、現在の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です。
コメント