Thư mục - PHP

Với hướng dẫn này các bạn sẽ học cách xử lý cây thư mục hoặc thư mục bằng PHP.

Làm việc với các thư mục / folder trong PHP

Trong chương trước, bạn đã học cách làm việc với các tập tin trong PHP. Tương tự, PHP cũng cho phép bạn làm việc với các thư mục trên hệ thống tập tin, ví dụ, bạn có thể mở một thư mục và đọc nội dung của nó, tạo hoặc xóa một thư mục, liệt kê tất cả các tập tin trong thư mục,...

Tạo một thư mục mới

Bạn có thể tạo một thư mục mới bằng cách gọi hàm mkdir(), với đường dẫn và tên của thư mục sẽ được tạo như khai báo trong ví dụ dưới đây:

Ví dụ

<?php
// Đường dẫn thư mục
$dir = "testdir";
 
// Kiểm tra sự tồn tại của thư mục
if (!file_exists($dir)) {
    // Tạo thư mục
    if (mkdir($dir)) {
        echo "Đã tạo thư mục thành công.";
    } else {
        echo "LỖI: Không thể tạo thư mục.";
    }
} else {
    echo "LỖI: Thư mục đã tồn tại.";
}
?>


Để cho hàm  mkdir()  hoạt động, các thư mục cha trong tham số đường dẫn thư mục *phải tồn tại. Ví dụ: nếu bạn chỉ định đường dẫn thư mục testdir/subdir thì buộc thư mục testdir phải tồn tại, nếu không PHP sẽ tạo ra lỗi.

Sao chép tập tin từ vị trí này đến vị trí khác

Bạn có thể sao chép tập tin từ vị trí này sang vị trí khác bằng cách gọi hàm copy() với các đường dẫn nguồn và đích của tập tin làm đối số. Nếu tập tin đích đã tồn tại, nó sẽ bị ghi đè lên. Đây là một ví dụ tạo bản sao của tập tin "example.txt" bên trong thư mục sao lưu.

Ví dụ

<?php
// Đường dẫn tệp nguồn
$file = "example.txt";
 
// Đường dẫn tệp đích
$newfile = "backup/example.txt";
 
// Kiểm tra sự tồn tại của tệp
if (file_exists($file)) {
    // Sao chép tệp
    if (copy($file, $newfile)) {
        echo "Sao chép thành công.";
    } else {
        echo "LỖI: Không thể sao chép tệp.";
    }
} else {
    echo "LỖI: Tệp không tồn tại.";
}
?>

Liệt kê tất cả các tập tin trong một thư mục

Bạn có thể sử dụng hàm scandir() để liệt kê các tập tin và thư mục bên trong đường dẫn được chỉ định.

Bây giờ chúng ta sẽ tạo một hàm tùy chỉnh để liệt kê đệ quy tất cả các tập tin trong một thư mục bằng PHP. Tập lệnh này sẽ rất hữu ích nếu bạn đang làm việc với cấu trúc thư mục lồng nhau sâu.

Ví dụ

<?php
// Định nghĩa một hàm để xuất tập tin trong một thư mục
function outputFiles($path) {
    // Kiểm tra xem thư mục tồn tại hay không
    if (tile_exists($path) && is_dir($path)) {
        // Quét tập tin trong thư mục
        $result = scandir($path);
        
        // Lọc ra các thư mục hiện tại (.) Và cha (..)
        $files = array_diff($result, array('.', '..'));
        
        if (count($files) > 0) {
            // Lặp qua mảng được trả về
            foreach ($files as $file) {
                if (is_file("$path/$file")) {
                    // Hiện tên tệp tin
                    echo $file . "<br>";
                } else if (is_dir("$path/$file")) {
                    // Gọi lại hàm đệ quy nếu tìm thấy các thư mục
                    outputFiles("$path/$file");
                }
            }
        } else {
            echo "LỖI: Không có tập tin nào trong thư mục.";
        }
    } else {
        echo "LỖI: Thư mục không tồn tại";
    }
}
 
// Gọi hàm
outputFiles("mydir");
?>

Liệt kê tất cả các tập tin thuộc một loại nhất định

Trong khi làm việc trên cấu trúc thư mục và tập tin, đôi khi chúng ta có thể cần phải tìm ra một số loại tập tin nhất định trong thư mục. Ví dụ: chỉ liệt kê tập tin .txt hoặc .png,... Bạn có thể thực hiện điều này dễ dàng với hàm glob(), hàm này khớp các tập tin dựa trên mẫu .

Mã PHP trong ví dụ sau đây sẽ tìm kiếm thư mục tài liệu và liệt kê tất cả các tập tin có phần mở rộng .txt. Nó sẽ không tìm kiếm các thư mục con.

Ví dụ

<?php
/* Tìm kiếm thư mục và lặp qua mảng trả về chứa các File phù hợp */
foreach (glob("documents/*.txt") as $file) {
    echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>


Hàm glob() cũng có thể được sử dụng để tìm tất cả các tập tin trong một thư mục hoặc thư mục con của nó. Hàm được định nghĩa trong ví dụ sau sẽ liệt kê đệ quy tất cả các tập tin trong một thư mục, giống như chúng ta đã làm trong ví dụ trước với hàm scandir().

Ví dụ

<?php
// Định nghĩa hàm tìm và xuất tệp tin
function outputFiles($path) {
    // Kiểm tra sự tồn tại của thư mục
    if (file_exists($path) && is_dir($path)) {
        // Tìm kiếm tập tin trong thư mục
        $files = glob($path ."/*");
        if (count($files) > 0) {
            // Lặp qua mảng được trả về
            foreach ($files as $file) {
                if (is_file("$file")) {
                    // Hiện tên
                    echo basename($file) . "<br>";
                } else if (is_dir("$file")) {
                    // Gọi lại hàm đệ quy với thư mục tìm thấy
                    outputFiles("$file");
                }
            }
        } else {
            echo "LỖI: Không tìm thấy tập tin nào trong thư mục.";
        }
    } else {
        echo "LỖI: Thư mục không tồn tại.";
    }
}
 
// Gọi hàm
outputFiles("mydir");
?>

 

Bài viết mới cập nhật