PHP Cơ bản
PHP Nâng cao
PHP & Cơ sở dữ liệu MySQL
Ví dụ PHP
Tài liệu tham khảo PHP
Quảng cáo

Thư mục trong PHP

Trong hướng dẫn này, 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 trong PHP

Trong chương trước, bạn đã học cách làm việc với các tệp 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, 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 trong thư mục, v.v.

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

Bạn có thể tạo một thư mục mới và trống 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ư thể hiện 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 từ vị trí này sang vị trí khác

Bạn có thể sao chép tệp 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 làm đối số. Nếu tệp đích đã tồn tại, nó sẽ bị ghi đè. Đây là một ví dụ tạo bản sao của tệp "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.";
}
?>


Để làm cho ví dụ này hoạt động, thư mục đích được sao lưu và tệp nguồn tức là "example.txt" phải tồn tại; nếu không PHP sẽ tạo ra lỗi.

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

Bạn có thể sử dụng hàm scandir() để liệt kê các tệp 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 sẽ liệt kê đệ quy tất cả các tệp trong một thư mục bằng PHP. Tập lệnh này sẽ 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 trong một thư mục
function outputFiles($path){
    // Kiểm tra xem thư mục tồn tại hay không
    if(file_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 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, đôi khi bạn có thể cần phải tìm ra một số loại tệp nhất định trong thư mục, ví dụ: chỉ liệt kê tệp .txt hoặc .png, v.v. 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 dựa trên mẫu .

Mã PHP trong ví dụ sau sẽ tìm kiếm thư mục tài liệu và liệt kê tất cả các tệp 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 tệp 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 file 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 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 này đã giúp ích cho bạn?

Advertisements