Hàm fileperms() trong PHP.

24/07/2020 - lượt xem
Chia sẻ
 
Rate this post

Định Nghĩa.

Hàm fileperms() sẽ lấy các quyền của file được truyền vào.

Cú pháp.

Cú pháp:

fileperms ( string $filename ) : int

Trong đó.

  • $filename là đường dẫn tới file.

Giá trị trả về.

  • Trả về quyền của tệp dưới dạng number mode. Các bit thấp hơn của chế độ này giống như các quyền mà chmod () mong đợi, tuy nhiên trên hầu hết các nền tảng, giá trị trả về cũng sẽ bao gồm thông tin về loại tệp được cung cấp dưới dạng filename. Các ví dụ dưới đây trình bày cách kiểm tra giá trị trả về cho các quyền và loại tệp cụ thể trên các hệ thống POSIX, bao gồm cả Linux và macOS.
  • Đối với các tệp cục bộ, giá trị trả về cụ thể là của thành viên st_mode của cấu trúc được trả về bởi hàm stat() của thư viện C. Chính xác các bit được đặt có thể thay đổi từ nền tảng này sang nền tảng khác và việc tìm kiếm tài liệu của nền tảng cụ thể của bạn được khuyến nghị nếu phân tích các bit không được phép của giá trị trả về là bắt buộc.

Ví dụ.

ví dụ 1 Tìm chủ sở hữu của một tập tin

code:

<?php
echo substr(sprintf('%o', fileperms('/tmp')), -4);
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
?>
// Kết quả có thể là 1777, 0664

Ví dụ 2 Hiển thị toàn quyền

code.

<?php
$perms = fileperms('/etc/passwd');

switch ($perms & 0xF000) {
    case 0xC000: // socket
        $info = 's';
        break;
    case 0xA000: // symbolic link
        $info = 'l';
        break;
    case 0x8000: // regular
        $info = 'r';
        break;
    case 0x6000: // block special
        $info = 'b';
        break;
    case 0x4000: // directory
        $info = 'd';
        break;
    case 0x2000: // character special
        $info = 'c';
        break;
    case 0x1000: // FIFO pipe
        $info = 'p';
        break;
    default: // unknown
        $info = 'u';
}
// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
            (($perms & 0x0800) ? 's' : 'x' ) :
            (($perms & 0x0800) ? 'S' : '-'));

// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
            (($perms & 0x0400) ? 's' : 'x' ) :
            (($perms & 0x0400) ? 'S' : '-'));

// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
            (($perms & 0x0200) ? 't' : 'x' ) :
            (($perms & 0x0200) ? 'T' : '-'));

echo $info;
?>

Kết quả:

-rw-r--r--

Errors/Exceptions.

  • Khi thất bại, Một cảnh báo E_WARNING được phát ra.

Ghi chú.

  • Kết quả của chức năng này được lưu trữ. Xem Clearstatcache () để biết thêm chi tiết.
  • Kể từ phiên bản PHP 5.0.0, chức năng này cũng có thể được sử dụng với một số trình bao bọc URL. Tham khảo các Supported Protocols and Wrappers  để xác định nhóm chức năng hỗ trợ stat() nào.

Hàm liên quan.

  • chmod() – Thay đổi quyền của file.
  • is_readable() – Cho biết liệu một tập tin tồn tại và có thể đọc được
  • stat() – Trả về thông tin của file.

Thông tin thêm.

  • Không sử dụng substr, sử dụngbit operator
    <?php
    decoct(fileperms($file) & 0777); // return "755" for example
    ?>
    
    // Nếu bạn muốn so sánh cấ quyền.
    <?php
    0755 === (fileperms($file) & 0777);
    ?>
  • Điều này có thể không rõ ràng ngay lập tức với một số người, nhưng bạn có thể sử dụng octdec ($ octal_value) để khớp với các quyền được truy xuất bởi perms tệp
    <?php
    
    //assumes file has 2770 permissions
    $perm= fileperms( __FILE__ );
    $bit = "102770";
    
    printf( "%s\n", octdec( $bit ) );
    printf( "%s\n", $perm);
    
    ?>
  • Đừng quên hàm : clearstatcache();  Khi bạn sử dụng : mkdir($dstdir, 0770 )) Hay: chmod($dstdir, 0774 ); Bạn cần gọi đến hàm : clearstatcache(); trước khi bạn có thể gọi đến. fileperms($dstdir);

Các bạn có thể xem chi tiết hơn trên php.net.

Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm fileperms() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm codetutam.com

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm