Bây giờ bạn có thể kiểm tra, đọc và ghi vào tệp, hãy chuyển sự chú ý của bạn sang các thư mục. PHP cung cấp nhiều hàm để làm việc với thư mục. Bạn sẽ xem cách tạo, xóa và đọc chúng
Tạo thư mục với mkdir[]
mkdir[] cho phép bạn tạo một thư mục. mkdir[] yêu cầu một chuỗi biểu thị đường dẫn đến thư mục bạn muốn tạo và một số nguyên phải là số bát phân biểu thị chế độ bạn muốn đặt cho thư mục. Bạn chỉ định một số bát phân [cơ số 8] với số 0 đứng đầu. Đối số chế độ sẽ chỉ có tác dụng trên các hệ thống Unix. Chế độ phải bao gồm ba số từ 0 đến 7, tương ứng thể hiện các quyền đối với chủ sở hữu thư mục, nhóm và mọi người. Hàm này trả về true nếu nó tạo thành công một thư mục hoặc false nếu nó không tạo. Nếu mkdir[] không thành công, điều này thường là do thư mục chứa có các quyền không cho phép ghi các quá trình có ID người dùng của tập lệnh. Nếu bạn không thoải mái với việc đặt quyền truy cập thư mục Unix, bạn sẽ thấy rằng một trong những ví dụ dưới đây phù hợp với nhu cầu của bạn. Trừ khi bạn thực sự cần thư mục của mình có thể ghi trên thế giới, có lẽ bạn nên sử dụng 0755, cho phép thế giới đọc thư mục của bạn nhưng không ghi vào đó
mkdir[ "testdir", 0777 ]; // global read/write/execute permissions mkdir[ "testdir", 0755 ]; // world and group: read/execute only // owner: read/write/execute
Xóa thư mục bằng rmdir[]
rmdir[] cho phép bạn xóa một thư mục khỏi hệ thống tệp, nếu quy trình đang chạy tập lệnh của bạn có quyền làm như vậy và nếu thư mục trống. rmdir[] chỉ yêu cầu một chuỗi đại diện cho đường dẫn đến thư mục bạn muốn tạo
rmdir[ "testdir" ];
Mở thư mục để đọc với opendir[]
Trước khi bạn có thể đọc nội dung của một thư mục, trước tiên bạn phải có được một tài nguyên thư mục. Bạn có thể làm điều này với hàm opendir[]. opendir[] yêu cầu một chuỗi đại diện cho đường dẫn đến thư mục bạn muốn mở. opendir[] trả về một xử lý thư mục trừ khi thư mục không có hoặc không thể đọc được, trong trường hợp đó, nó trả về false
$dh = opendir[ "testdir" ];
Đọc nội dung của một thư mục với readdir[]
Giống như bạn sử dụng get[] để đọc một dòng từ tệp, bạn có thể sử dụng readdir[] để đọc tên tệp hoặc thư mục từ một thư mục. readdir[] yêu cầu xử lý thư mục và trả về một chuỗi chứa tên mục. Nếu đã đến cuối thư mục, readdir[] trả về false. Lưu ý rằng readdir[] chỉ trả về tên của các mục của nó, thay vì đường dẫn đầy đủ. Liệt kê 10. 14 hiển thị nội dung của một thư mục
Liệt kê 10. 14 Liệt kê nội dung của một thư mục với readdir[]
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:
Chúng ta mở thư mục để đọc bằng hàm opendir[] ở dòng 9 và sử dụng câu lệnh while để lặp qua từng phần tử của nó ở dòng 11. Chúng tôi gọi readdir[] như một phần của biểu thức kiểm tra câu lệnh while, gán kết quả của nó cho biến $file. Trong phần thân của câu lệnh while, chúng ta sử dụng biến $dirname kết hợp với biến $file để tạo một đường dẫn tệp đầy đủ, sau đó chúng ta có thể kiểm tra đường dẫn này trên dòng 12. Nếu đường dẫn dẫn đến một thư mục, chúng ta in " " ra trình duyệt ở dòng 13. Cuối cùng, chúng tôi in tên tệp trên dòng 15
Chúng tôi đã sử dụng một cấu trúc thận trọng trong bài kiểm tra câu lệnh while. Hầu hết các lập trình viên PHP [bao gồm cả tôi] sẽ sử dụng một cái gì đó như sau
while [ $file = readdir[ $dh ] ] { print "$file
\n"; }
Giá trị được trả về bởi readdir[] sẽ được kiểm tra. Bởi vì bất kỳ chuỗi nào khác với "0" sẽ phân giải thành true, nên sẽ không có vấn đề gì. Tuy nhiên, hãy tưởng tượng một thư mục chứa bốn tệp "0", "1", "2" và "3". Đầu ra từ đoạn mã trước trên hệ thống của tôi như sau
. ..
Khi vòng lặp đến tệp có tên "0", chuỗi được trả về bởi readdir[] sẽ chuyển thành false, khiến vòng lặp kết thúc. Cách tiếp cận trong Liệt kê 10. 14 sử dụng === để kiểm tra xem giá trị trả về được trả về bởi readdir[] không chính xác tương đương với false. 0 chỉ giải quyết sai trong thử nghiệm, vì vậy chúng tôi tránh được sự cố
Trong quá trình phát triển PHP hàng ngày của bạn, bạn thường cần xử lý một hệ thống tệp—ví dụ: lấy danh sách các tệp trong một thư mục cụ thể. PHP cung cấp một vài cách khác nhau để đọc nội dung của một thư mục một cách dễ dàng. Hôm nay, chúng ta sẽ xem qua tất cả các phương pháp này, cùng với các ví dụ để hiểu cách thức hoạt động của từng phương pháp
Hàm while [ $file = readdir[ $dh ] ] {
print "$file
\n";
}
5, while [ $file = readdir[ $dh ] ] {
print "$file
\n";
}
6 và while [ $file = readdir[ $dh ] ] {
print "$file
\n";
}
7
\n"; }
\n"; }
\n"; }
Trong phần này, chúng ta sẽ thảo luận về các hàm
while [ $file = readdir[ $dh ] ] { print "$file5,
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file6 và
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file7 để xem cách bạn có thể sử dụng chúng để lấy danh sách các tệp trong một thư mục cụ thể
\n"; }
Hàm
while [ $file = readdir[ $dh ] ] { print "$file5 cho phép bạn mở một bộ điều khiển thư mục mà bạn có thể sử dụng cùng với các hàm khác cho các hoạt động khác nhau trên thư mục. Bạn cần chuyển đường dẫn đến thư mục trong đối số đầu tiên của hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file5. Nếu đường dẫn thư mục hợp lệ, tài nguyên xử lý thư mục sẽ được trả về
\n"; }
Hàm
while [ $file = readdir[ $dh ] ] { print "$file6 cho phép bạn đọc một thư mục. Bạn cần cung cấp một xử lý thư mục hợp lệ trong đối số đầu tiên của hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file6 và bạn có thể lặp lại tất cả các mục nhập và nhận danh sách tất cả các tệp trong một thư mục
\n"; }
Hàm
while [ $file = readdir[ $dh ] ] { print "$file7 cho phép bạn đóng điều khiển thư mục được mở bởi hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file5. Bạn nên sử dụng hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file7 sau khi hoàn thành các thao tác của mình trên bộ điều khiển thư mục [ban đầu được mở bởi hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file5]
\n"; }
Bây giờ, hãy xem nó hoạt động trong ví dụ sau
Đầu tiên, chúng tôi đã sử dụng chức năng
while [ $file = readdir[ $dh ] ] { print "$file5 để xử lý thư mục. Tiếp theo, chúng tôi đã sử dụng hàm
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file6 để lặp qua xử lý thư mục 2 và lưu trữ danh sách các tệp trong mảng 3
\n"; }
Hàm 4
Trong phần này, chúng ta sẽ xem cách bạn có thể sử dụng hàm
4 để lấy nội dung thư mụcHàm
4 là một cách khá đơn giản để lấy danh sách các tệp và thư mục trong một thư mục cụ thể. Bạn chỉ cần chuyển đường dẫn thư mục mà bạn muốn đọc vào đối số đầu tiên của hàm 4Hãy xem qua ví dụ sau để hiểu cách thức hoạt động của nó
rmdir[ "testdir" ];3
Như bạn có thể thấy, điều này cung cấp một danh sách các tệp và thư mục trong một cuộc gọi. Nếu bạn chỉ cần lấy danh sách các tệp trong một thư mục, thì đây là lựa chọn tốt hơn so với sử dụng
while [ $file = readdir[ $dh ] ] { print "$file5,
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file6 và
\n"; }
while [ $file = readdir[ $dh ] ] { print "$file7
\n"; }
Hàm rmdir[ "testdir" ];
41
Hàm
rmdir[ "testdir" ];41 hoạt động tương tự như hàm 4, với sự khác biệt là nó cho phép bạn chỉ định một mẫu để lọc và khớp các tệp trong thư mục
Hãy xem cách sử dụng hàm
rmdir[ "testdir" ];41 để đọc tất cả nội dung của một thư mục cụ thể
Như bạn có thể thấy, chúng tôi đã vượt qua mẫu
rmdir[ "testdir" ];45 vì chúng tôi muốn đọc tất cả nội dung. Mặt khác, nếu bạn chỉ muốn liệt kê một loại tệp cụ thể, bạn cũng có thể làm điều đó, như minh họa trong đoạn mã sau
rmdir[ "testdir" ];4
trong trường hợp này,
3 sẽ chỉ chứa tên của các tệprmdir[ "testdir" ];47
Hàm rmdir[ "testdir" ];
48
Các tùy chọn mà chúng tôi đã thảo luận cho đến nay cho phép bạn đọc nội dung thư mục theo cách thủ tục. Trong phần này, chúng ta sẽ xem cách bạn có thể sử dụng hàm
rmdir[ "testdir" ];48, đây là cơ chế hướng đối tượng để đọc thư mục
Khi bạn sử dụng hàm
rmdir[ "testdir" ];48 và chuyển một đường dẫn thư mục vào đối số đầu tiên, hàm này sẽ trả về một thể hiện của lớp
$dh = opendir[ "testdir" ];61 mà sau đó bạn có thể sử dụng để đọc nội dung thư mục
Hãy xem qua ví dụ sau để xem nó hoạt động chính xác như thế nào
$dh = opendir[ "testdir" ];6
Đầu tiên, chúng ta sử dụng hàm
rmdir[ "testdir" ];48 để khởi tạo một thể hiện của lớp
$dh = opendir[ "testdir" ];61 thành biến
$dh = opendir[ "testdir" ];64. Tiếp theo, chúng tôi đã sử dụng phương thức
$dh = opendir[ "testdir" ];65 của lớp
$dh = opendir[ "testdir" ];61 để lặp lại tất cả các mục
Lớp học $dh = opendir[ "testdir" ];
67
Trong phần này, chúng ta sẽ xem cách bạn có thể sử dụng lớp
$dh = opendir[ "testdir" ];67 để đọc nội dung thư mục. Lợi ích của việc sử dụng lớp
$dh = opendir[ "testdir" ];67 là bạn có thể mở rộng các phương thức của lớp này và nó cũng cung cấp rất nhiều phương thức hữu ích khác cho phép bạn tìm nạp nhiều thông tin khác nhau về tệp
Hãy xem qua ví dụ sau để hiểu cách thức hoạt động của nó
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:6
Như bạn có thể thấy, thật dễ dàng để sử dụng lớp
$dh = opendir[ "testdir" ];67 và lặp lại các mục nhập. Trong ví dụ trên, chúng tôi đã sử dụng phương thức
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:61 của lớp
$dh = opendir[ "testdir" ];67 để lấy tên tệp. Tuy nhiên, lớp
$dh = opendir[ "testdir" ];67 cũng cung cấp một số phương thức tiện ích như
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:64,
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:65,
1: 2: 3: Listing 10.14 Listing the contents 4: of a directory with readdir[] 5: 6: 7: "; 15: } 16: closedir[ $dh ]; 17: ?> 18: 19:66, v.v.
Vì vậy, đó là cách bạn có thể sử dụng lớp
$dh = opendir[ "testdir" ];67 để lấy danh sách các tệp trong một thư mục
Sự kết luận
Hôm nay, chúng ta đã thảo luận về các cách khác nhau để liệt kê tất cả các tệp trong một thư mục trong PHP. Dưới đây là bảng so sánh từng phương pháp để giúp bạn chọn phương pháp nào phù hợp với mình