【问题标题】:Find a file within any a specific folder with subfolders using PHP使用 PHP 在任何带有子文件夹的特定文件夹中查找文件
【发布时间】:2010-11-18 07:52:11
【问题描述】:

我坚持以下,所以任何帮助将不胜感激。

我有一个如下的文件夹树:

images/collections/

在 collections 文件夹中可能有许多子文件夹

images/collections/collection1, images/collections/collection2

图像命名为

imageProductCode-something.jpg

我要做的是将一个变量(我的产品代码)传递给脚本,然后在任何文件夹中找到该文件并返回其路径...

images/collections/collection3/imageProductCode-something.jpg

【问题讨论】:

    标签: php file directory


    【解决方案1】:

    您可以使用RecursiveDirectoryIterator

    function getImageDirectory($iId) {
        $oDirectory = new RecursiveDirectoryIterator("/path/to/images/");
        $oIterator = new RecursiveIteratorIterator($oDirectory);
        foreach($oIterator as $oFile) {
            if ($oFile->getFilename() == 'imageProductCode-' . $iId . '.jpg') {
                return $oFile->getPath();
            }
        }
    }
    

    【讨论】:

    • 将其包装成自定义的FilterIterator 或使用RecursiveRegexIterator,你就会得到我的支持。此外,您不需要检查isFile,因为RecursiveIteratorIterator 的默认行为是只返回叶子,所以$oFile 将始终是文件。
    【解决方案2】:

    你可以检查你所有的收藏:

    $collections = array('collection1', 'collection2', 'collection3');
    
    foreach ($collections as $collection) {
      if (file_exists('/path/to/collections/'.$collection.'/'.$productCode.'.jpg')) {
        ... do your thing ...
        break;
      }
    }
    

    根据目录的大小,创建数据库(平面文件或 MySQL)以查找特定产品代码的图像位置可能会更快。

    【讨论】:

    • 这看起来是个好主意,我同意你关于添加脚本来列出位置的观点
    • 如果你想要数据库,我建议使用 sqlite
    【解决方案3】:

    如果您使用的是

    1. 打开目录
    2. 读取目录
    3. is_dir
    4. is_file

    从图像的根目录开始,检查每个条目。如果是目录,请检查目录。 看起来工作量很大,所以如果您正在查看大型目录和图像集合,您可能需要查看 unix 命令或 db 链接,如上所述。

    另一种方法是让目录在逻辑上连接到图像,这样您就可以根据图像的名称(或其他属性)来判断要在哪个目录中查找。

    祝你好运,

    一晒

    【讨论】:

    • SPL(特别是 DirectoryIterators)是在 PHP5 中添加的,尽管它们在 5.3 之后不能再被禁用。不纠正这个答案,只是补充你的观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多