foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(".")) as $file) {
echo "$file\n";
}
Có cách nào để mã này không ném UnexpectedValueException "không mở được thư mục: Quyền bị từ chối" bất kỳ khi nào có thư mục con không đọc được bên trong thư mục tôi cố liệt kê?Tôi có thể làm cho RecursiveDirectoryIterator bỏ qua các thư mục không đọc được không?
CẬP NHẬT
Chuyển đổi foreach()
để while()
và gọi một cách rõ ràng Iterator::next()
bọc trong try() catch {}
không giúp. Mã này:
$iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("."));
while($iter->valid()) {
$file = $iter->current();
echo "$file\n";
try {
$iter->next();
} catch(UnexpectedValueException $e) {
}
};
là vòng lặp vô hạn nếu có thư mục con không thể đọc được.
quấn nó thành các khối catch. và nó có vẻ là một ideea xấu để tạo ra các đối tượng mới ngay bên trong dấu ngoặc đơn foreach – s3v3n
Để xây dựng trên nhận xét của s3v3n. Nó có vẻ là một ý tưởng tồi, bởi vì chính xác những gì đang xảy ra là rất khó để xác định. Mã tốt không phải lúc nào cũng là mã nhỏ nhất hoặc nhanh nhất. – DampeS8N
Không khó để xác định điều gì sẽ xảy ra nếu bạn biết RecursiveIteratorIterator và RecursiveDirectoryIterator là gì và trường hợp sử dụng phổ biến của chúng là gì. Đó là mã đơn giản. –