3

我想抓取目录中的第一个文件,而不接触/抓取所有其他文件。文件名未知。

一种非常短的方法可能是这样,使用glob

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

但是如果那个目录中有很多文件,就会有一些开销。

其他方法是这个问题的答案 - 但都涉及一个循环并且也比 glob 示例更长:

PHP:如何在不扫描整个目录的情况下从目录中获取单个文件?

有没有一种非常简短有效的方法来解决这个问题?

4

3 回答 3

4

可能不是完全有效,但如果你只想要出现的第一个 jpg,那么

$dh = opendir('directory/');
while($filename = readdir($dh)) {
   if (substr($filename, -4) == '.jpg')) {
       break;
   }
}
于 2013-10-04T20:44:10.657 回答
2

好吧,这并不完全是单线的,但我相信这是一条路要走:

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

但是为什么不将它包装在一个函数中并像使用它一样使用它get_first_file('directory/')呢?这将是一个美好而短暂的!

于 2013-10-04T21:32:54.927 回答
0

此函数将获取任何类型的第一个文件名。

function get_first_filename ($dir) {
  $d = dir($dir);
  while ($f = $d->read()){
    if (is_file($dir . '/' . $f)) { 
      $d->close();
      return $f;
    }
  }
}
于 2013-10-04T22:06:27.053 回答