Tôi có một thư mục với 1,3 triệu tệp mà tôi cần chuyển vào cơ sở dữ liệu. Tôi chỉ cần lấy một tên tập tin duy nhất từ thư mục KHÔNG quét toàn bộ thư mục. Nó không quan trọng mà tập tin tôi lấy như tôi sẽ xóa nó khi tôi đang thực hiện với nó và sau đó chuyển sang kế tiếp. Điều này có thể không? Tất cả các ví dụ tôi có thể tìm thấy dường như quét toàn bộ danh sách thư mục thành một mảng. Tôi chỉ cần lấy một lúc để xử lý ... không phải 1,3 triệu lần.PHP: Làm thế nào tôi có thể lấy một tệp từ một thư mục mà không cần quét toàn bộ thư mục?
Trả lời
này nên làm điều đó:
<?php
$h = opendir('./'); //Open the current directory
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..') { //Skips over . and ..
echo $entry; //Do whatever you need to do with the file
break; //Exit the loop so no more files are read
}
}
?>
Trả về tên của mục tiếp theo trong danh bạ. Các mục được trả về theo thứ tự mà chúng được lưu trữ bởi hệ thống tập tin.
Tôi muốn chèn '.'and' .. 'vào cơ sở dữ liệu hơn là kiểm tra 1.3 triệu lần. –
@SamyDindane, Việc kiểm tra đó sẽ không mất nhiều thời gian, đặc biệt so với việc đọc tệp từ đĩa và lưu trữ nó trong cơ sở dữ liệu ... – Zombaya
Tuy nhiên, có thể tránh được phí trên (mọi trợ giúp) chỉ bằng cách thực hiện hai cuộc gọi đến 'readdir' trước vòng lặp, như' .' và '..' luôn là các mục đầu tiên. – connec
readdir sẽ thực hiện thủ thuật. Kiểm tra các exampl trên trang đó, nhưng thay vì thực hiện cuộc gọi readdir trong vòng lặp, chỉ cần làm điều đó một lần. Bạn sẽ nhận được tệp đầu tiên trong thư mục.
Lưu ý: bạn có thể nhận được ".", ".." và các phản hồi tương tự khác tùy thuộc vào máy chủ, vì vậy bạn có thể muốn ít nhất lặp cho đến khi bạn nhận được tệp hợp lệ.
Chỉ cần có được các thư mục iterator và tìm kiếm các mục nhập đầu tiên mà là một tập tin:
foreach(new DirectoryIterator('.') as $file)
{
if ($file->isFile()) {
echo $file, "\n";
break;
}
}
này cũng đảm bảo rằng mã của bạn được thực hiện trên một số hành vi tập tin hệ thống khác so với cái mà bạn mong đợi.
Xem DirectoryIterator
và SplFileInfo
.
Tuy nhiên, điều này không tải toàn bộ nội dung thư mục vào một mảng? Đó là những gì Kyle đang cố gắng tránh.Điều đó có thể tạo sự khác biệt khi bạn có hàng ngàn tệp trong thư mục. – skibulk
@skibulk: Không, nó lặp lại qua ** DirectoryIterator ** không phải là mảng mà là một đối tượng. Điều này ngăn chặn hiệu quả những gì bạn sợ: một mảng. – hakre
Tuyệt. Tôi đã quen với các mảng 'foreach'ing. Vì vậy, khi 'foreach' truy cập vào chỉ mục tiếp theo của' DirectoryIterator', nó thực sự gọi một phương thức (IE getNextFile()) thay vào đó? Lạ thật. – skibulk
bạn có muốn trả lại thư mục đầu tiên HOẶC tệp đầu tiên không? cả hai? sử dụng này:
tạo chức năng "pickfirst" với 2 lập luận
function pickfirst($address,$file) { // $file=false >> pick first dir , $file=true >> pick first file
$h = opendir($address);
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..' && (($file==false && !is_file($address.$entry)) || ($file==true && is_file($address.$entry))) )
{ return $entry; break; }
} // end while
} // end function
nếu bạn muốn chọn thư mục đầu tiên trong địa chỉ của bạn thiết lập $file
false và nếu bạn muốn chọn đầu tiên (địa chỉ và chế độ dir hoặc nộp?) trong tập hợp địa chỉ $file
của bạn thành sự thật.
chúc may mắn :)
- 1. Làm thế nào để quét một thư mục trong Java?
- 2. Làm thế nào tôi có thể lấy danh sách thư mục trước sau khi mở một tệp từ danh sách thư mục/tệp?
- 3. Cách quét thư mục có ký tự đại diện với một thư mục con cụ thể
- 4. làm thế nào tôi có thể trỏ PHP glob vào một thư mục cụ thể?
- 5. HG: Cập nhật một thư mục cho một phiên bản cụ thể mà không cần sao chép toàn bộ repo?
- 6. Lấy thư mục gốc của một thư mục +1
- 7. Tạo tệp Tar từ thư mục trong PHP mà không cần exec/passthru
- 8. Cách thanh toán một vài tệp và thư mục mà không cần kiểm tra toàn bộ nguồn
- 9. Làm cách nào để sao chép các tệp của tôi từ một thư mục này sang một thư mục khác?
- 10. Cách lấy danh sách tệp từ một thư mục cụ thể trong bộ nhớ trong?
- 11. Cách lấy phiên bản thư mục cụ thể từ tfs mà không cần tạo không gian làm việc?
- 12. Lấy danh sách các thư mục trong một thư mục
- 13. tìm thư mục trong một thư mục mà không liệt kê thư mục gốc
- 14. php glob - quét trong các thư mục con cho một tệp
- 15. Làm cách nào để thêm tệp và thư mục vào tệp zip mà không có thư mục gốc?
- 16. PHP: Làm thế nào để liệt kê các file trong một thư mục mà không cần thư mục con niêm yết
- 17. Làm thế nào tôi có thể chia một thư mục với hàng ngàn hình ảnh thành nhiều thư mục con?
- 18. VBA để sao chép tệp từ một thư mục này sang một thư mục khác
- 19. Làm thế nào tôi có thể thực sự làm Subversion bỏ qua một thư mục?
- 20. Kiểm tra xem thư mục không có tệp nào, nhưng thư mục này có thể chứa các thư mục con
- 21. Làm thế nào để hiển thị các thư mục và thư mục con từ thư mục trong PHP
- 22. jpegtran toàn bộ thư mục
- 23. Zip toàn bộ thư mục trên S3
- 24. Làm cách nào để tôi có thể thêm một tệp mà không thay đổi thư mục làm việc hiện tại?
- 25. Để chỉ hiển thị tên file mà không cần toàn bộ đường dẫn thư mục
- 26. Tải toàn bộ thư mục qua PHP FTP
- 27. Làm thế nào để tôi nói một tệp từ thư mục bằng Python?
- 28. Làm thế nào tôi có thể ssh trực tiếp đến một thư mục cụ thể?
- 29. Tôi có thể thực hiện quét thư mục và tệp đệ quy đầy đủ như thế nào?
- 30. Cách xem một thư mục con của thư mục có thay đổi không
@JonathanSampson Tôi nghi ngờ anh ấy quan tâm đến tên tệp. Anh ta muốn lấy bất kỳ tập tin nào, đặt nó vào cơ sở dữ liệu, và chuyển sang tệp tiếp theo. –