int fileperms ( string $filename )
(PHP 4, PHP 5)

파일(또는 디렉토리)의 퍼미션 값을 알려주는 함수입니다.

$filename 인자에 파일(또는 디렉토리)의 경로를 지정하면 10진수로 반환하는데, 일반적으로 파일의 권한이 0644이므로 10진수인 33188로 반환받아 8진수로 변환해줄 필요가 있습니다.

<?php
 $stat = fileperms('test.php');
 echo $stat; // 결과: 33188

 // decoct함수는 10진수를 8진수로 변환해줍니다.
 $decoct = decoct($stat);
 echo $decoct; // 결과: 100644

 // substr함수로 끝에서 4자리만 추출해서 8진수로 만들어 줍니다.
 echo substr($decoct, -4); // 결과: 0644
 ?>

sprintf 함수로도 가능합니다.

<?php
 // %o는 정수를 8진수로 변환해줍니다.
 $decoct = substr(sprintf('%o', fileperms('test.php')), -4);

 echo $decoct; // 결과: 0644
 ?>

substr 로 끝에서 4자리를 자르는 이유는 파일의 유형에 따라 4~6자리로 표현되기 때문입니다. 다음은 다른 방법의 예제입니다.

<?php
 $dir = './mail/test.php';
 if(is_file($dir)){
    // 파일이면 -32768, 폴더이면 -16384를 뺀 나머지가 권한입니다.
    $perms = fileperms($dir) - 32768;
    echo $perms; // 결과: 644
 } else if(is_dir($dir)){
    $perms = fileperms($dir) - 16384;
    echo $perms;
 }
 ?>

0 댓글