PHP:如何抓住从一个目录中的一个文件,而无需扫描整个目录?(PHP: How can I grab

2019-06-24 13:19发布

我有1.3万个文件,我需要移动到数据库的目录。 我只需要抓住从目录中的一个文件名,而不扫描整个目录。 不要紧,我抢的文件,我会删除它,当我完成它,然后继续前进到下一个。 这可能吗? 我能找到的所有例子似乎扫描整个目录列表到一个数组。 我只需要抓住每一次一次一个处理...不是130万。

Answer 1:

这应该这样做:

<?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
    }
}
?>

READDIR

返回目录中下一个条目的名称。 该条目在它们被通过文件系统中的排序返回。



Answer 2:

刚刚获得的目录迭代器并查找一个文件的第一项:

foreach(new DirectoryIterator('.') as $file)
{
    if ($file->isFile()) {
        echo $file, "\n";
        break;
    }        
}

这也保证了你的代码是在低于预期的一个其他一些文件系统的行为执行。

DirectoryIteratorSplFileInfo



Answer 3:

READDIR会做的伎俩。 检查为例该网页上,但不是在循环做READDIR调用,只需做一次。 你会得到该目录中的第一个文件。

注意:你可能会得到,“..‘以及其他类似的反应取决于在服务器上,所以你可能要至少循环,直到你得到一个有效的文件’。”。



Answer 4:

你想回到最初的目录文件或第一个? 都? 用这个:

创建函数“PICKFIRST”与2参数(地址和模式DIR或文件?)

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

如果你想挑你的地址设定的第一个目录$file为假,如果你想挑选第一个文件在您的地址集$file为真。

祝好运 :)



文章来源: PHP: How can I grab a single file from a directory without scanning entire directory?