2014-04-18 72 views

回答

1

是的,它是可能的。你擁有的數組越大,php會消耗更多的內存,直到達到max_memory的限制,然後破壞你的代碼。相反水珠使用readdir的,不會消耗很多:

if ($handle = opendir('/path/to/files')) { 
    while (false !== ($entry = readdir($handle))) { 
     $ext = strtolower(end(explode('.', $entry))); 
     // Check for extension, first 4 characters a number and 5th character underscore 
     if ($ext == 'jpg' && substr($entry, 0, 5) == ($id . '_')) { 
      echo "$entry\n"; 
     } 
    } 

    closedir($handle); 
} 

來源:http://www.php.net/manual/en/function.readdir.php

+0

謝謝你的回答。我用我的代碼更新了我的問題。你可以看看嗎?您的方法是否允許我使用'「。$ id。」*。jpg「'部分?我正在考慮將其轉換爲它。 – EnexoOnoma

+0

您可以檢查擴展名爲文件名。將更新代碼以反映。 –

+0

The文件夾只包含jpg文件,格式爲4位數字,後跟下劃線和隨機名稱 – EnexoOnoma

1

是;很可能你會覺得它很慢。

我更喜歡RecursiveDirectoryIterator或DirectoryIterator。

這是一個使用RecursiveDirectoryIterator的演示,該演示應打印所有目錄中的所有文件,以指定根目錄。

<?php 
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'), RecursiveIteratorIterator::SELF_FIRST); 
foreach($files as $name => $file) { 
    echo $name . '<br />'; 
} 
?> 

編輯: 閱讀您的意見後,我做了,可能是更適合你的解決方案。

<?php 
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(".")); 
$files = new RegexIterator($files,'/^.+\.jpeg$/i',RecursiveRegexIterator::GET_MATCH); 

但是,readdir解決方案速度更快。

+0

是否'RecursiveDirectoryIterator'加載所有文件或它像'readdir'一樣行事。如果是這樣,它可能是一個更好的解決方案,謝謝我的回答。 –

+0

它d除了讀取文件名稱AFAIK之外,它不執行任何I/O操作。 –

+0

我的意思是像'glob'那樣做1個I/O並將文件放入對象中,或者像'readdir'那樣,每個文件讀取一個I/O操作。 –

相關問題