Hàm realpath() trong PHP

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

Định nghĩa.

Hàm realpath() sẽ trả về đường dẫn tuyệt đối của đường dẫn truyền vào. Đường dẫn tuyệt đối sẽ không bao gồm các thành phần /./ hoặc /../.

Cú pháp.

Cú pháp:

realpath ( string $path ) : string

Trong đó.

  • $path là đường dẫn tương đối. – Ghi chú: Trong khi một đường dẫn phải được cung cấp, giá trị có thể là một chuỗi rỗng. Trong trường hợp này, giá trị được hiểu là thư mục hiện tại.

Giá trị trả về.

  • Trả về tên đường dẫn tuyệt đối được chuẩn hóa khi thành công. Đường dẫn kết quả sẽ không có liên kết tượng trưng, ​​/./ hoặc /../ thành phần. Các dấu phân cách theo sau, chẳng hạn như \ và /, cũng bị xóa.
  • realpath () trả về FALSE khi không thành công, ví dụ: nếu tệp không tồn tại.

Changelog.

  • 5.3.0 Trước bản phát hành này, nếu chỉ có thành phần đường dẫn cuối cùng không tồn tại, realpath () sẽ không bị lỗi trên hệ thống * BSD. realpath () bây giờ không thành công trong trường hợp này.
  • 5.2.1 Trước phiên bản này, realpath () trả về FALSE nếu đường dẫn là một chuỗi rỗng hoặc NULL.

Ghi chú.

  • Ghi chú: Tập lệnh đang chạy phải có quyền thực thi trên tất cả các thư mục trong hệ thống phân cấp, nếu không, realpath () sẽ trả về FALSE.
  • Ghi chú: Đối với hệ thống tệp không phân biệt chữ hoa chữ thường, realpath()  có thể chuẩn hóa hoặc không thể chuẩn hóa chữ hoa chữ thường.
  • Ghi chú: Hàm realpath () sẽ không hoạt động đối với tệp nằm bên trong Phar vì đường dẫn như vậy sẽ là đường dẫn ảo, không phải đường dẫn thực.
  • Lưu ý: Vì kiểu số nguyên của PHP được ký và nhiều nền tảng sử dụng số nguyên 32 bit, một số hàm hệ thống tệp có thể trả lại kết quả không mong muốn cho các tệp lớn hơn 2GB

Ví dụ.

Ví dụ # 1.

code.

<?php
chdir('/var/www/');
echo realpath('./../../etc/passwd') . PHP_EOL;

echo realpath('/tmp/') . PHP_EOL;
?>

Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:

/etc/passwd
/tmp

Ví dụ # 2 realpath () trên Windows.

  • Trên windows realpath () sẽ thay đổi đường dẫn kiểu unix thành kiểu window
<?php
echo realpath('/windows/system32'), PHP_EOL;

echo realpath('C:\Program Files\\'), PHP_EOL;
?>

Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:

C:\WINDOWS\System32
C:\Program Files

Hàm liên quan.

Thông tin thêm.

  • Cần một phương pháp để chuẩn hóa một đường dẫn ảo có thể xử lý .. các tham chiếu vượt ra ngoài tham chiếu thư mục ban đầu. Vì vậy, tôi đã tạo ra sau đây.
    <?php
    
    function normalizePath($path)
    {
        $parts = array();// Array to build a new path from the good parts
        $path = str_replace('\\', '/', $path);// Replace backslashes with forwardslashes
        $path = preg_replace('/\/+/', '/', $path);// Combine multiple slashes into a single slash
        $segments = explode('/', $path);// Collect path segments
        $test = '';// Initialize testing variable
        foreach($segments as $segment)
        {
            if($segment != '.')
            {
                $test = array_pop($parts);
                if(is_null($test))
                    $parts[] = $segment;
                else if($segment == '..')
                {
                    if($test == '..')
                        $parts[] = $test;
    
                    if($test == '..' || $test == '')
                        $parts[] = $segment;
                }
                else
                {
                    $parts[] = $test;
                    $parts[] = $segment;
                }
            }
        }
        return implode('/', $parts);
    }
    ?>
  • Lưu ý: Nếu bạn sử dụng điều này để kiểm tra xem tệp có tồn tại hay không, đường dẫn của tệp đó sẽ được lưu vào bộ nhớ đệm và trả về true ngay cả khi tệp bị xóa (thay vào đó hãy sử dụng file_exists).
  • Đây là một hàm để chuẩn hóa một URL chứa các đường dẫn tương đối. Gặp sự cố khi kéo liên kết từ một trang từ xa.
    <?php
    
    function canonicalize($address)
    {
        $address = explode('/', $address);
        $keys = array_keys($address, '..');
    
        foreach($keys AS $keypos => $key)
        {
            array_splice($address, $key - ($keypos * 2 + 1), 2);
        }
    
        $address = implode('/', $address);
        $address = str_replace('./', '', $address);
    }
    
    $url = 'http://www.example.com/something/../else';
    echo canonicalize($url); //http://www.example.com/else
    
    ?>

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 realpath() 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