2013-10-04 32 views
3

我想抓住目錄中的第一個文件,而不需要觸摸/抓取所有其他文件。文件名是未知的。是否有一個高效的單線程來抓取目錄中的第一個文件?

一個非常短的路可能是這一點,使用glob

$file = array_slice(glob('/directory/*.jpg'), 0, 1); 

但如果有大量的文件在該目錄中,會有一些開銷。

其他方式是這個問題的答案 - 但都涉及一個循環,並也不再那麼水珠例如:

PHP: How can I grab a single file from a directory without scanning entire directory?

有沒有辦法解決這個很短的和有效的方式?

+0

排序方式...? –

+0

@ChrisRasco排序無關緊要。 – lampshade

+0

如何將代碼轉換爲函數? – abstr

回答

4

也許不是完全有效的,但如果你只希望出現的第一個JPG,然後

$dh = opendir('directory/'); 
while($filename = readdir($dh)) { 
    if (substr($filename, -4) == '.jpg')) { 
     break; 
    } 
} 
+1

這實際上也「不接觸所有其他文件」 –

+0

這可能會返回一個名稱以'.jpg'結尾的_folder_ –

+0

OP的原始... –

2

嗯,這並不完全是一個班輪,但它是很長的路要走,我相信:

$result = null; 
foreach(new FilesystemIterator('directory/') as $file) 
{ 
    if($file->isFile() && $file->getExtension() == 'jpg') { 
     $result = $file->getPathname(); 
     break; 
    }   
} 

但爲什麼你不把它包裝在一個函數中,並使用它像get_first_file('directory/')?這將是一個不錯的和短暫的!

+0

+1非常感謝您的努力。我確實喜歡使用'FilesystemIterator'作爲面向對象的方法。 – lampshade

0

該函數將獲得任何類型的第一個文件名。

function get_first_filename ($dir) { 
    $d = dir($dir); 
    while ($f = $d->read()){ 
    if (is_file($dir . '/' . $f)) { 
     $d->close(); 
     return $f; 
    } 
    } 
} 
相關問題