【问题标题】:PHP - search for a file within the current folder and subfoldersPHP - 在当前文件夹和子文件夹中搜索文件
【发布时间】:2017-08-07 07:11:56
【问题描述】:

我正在尝试在 PHP 中检索文件的路径,但我目前卡住了。我有一个这样的文件夹结构:

- folder 1/
- folder 2/
    - subfolder 2.1/
    - subfolder 2.2/
        - subfolder 2.2.1/
        - subfolder 2.2.2/
            - targetFile.txt
            - script1.php
            - script2.php
            - .htaccess
        - file1.php
        - file2.php
        - file3.php
        - getFile.php
        .htaccess
- Folder 3/
- Folder 4/
...

我希望在运行getFile.php 脚本时获得targetFile.txtrelative 路径。目标文件始终位于与 getFile.php 位于同一父文件夹中的文件夹中。如果上面的相对路径应该打印出来:

subfolder 2.2.2/targetFile.txt

这是我目前所拥有的:

$dir = getcwd(); // Getting the current working dir
$files = scandir($dir); // Get all files and folders within the working dir
foreach ($files as $file) {
    if ($file = 'targetFile.txt') { // Look for a file that matches the targeted file name
        echo dirname($file);
    }
}

上面的代码不能正常工作,因为我没有得到目标文件的相对路径。

任何帮助表示赞赏。

【问题讨论】:

  • 无法正常工作是什么意思?
  • 为了确保我理解正确:您能提及您的getFile.php 所在的目录吗?
  • @Twinfriends getFile.php 总是在同一个父目录中。问题是targetFile.txt 的子目录正在改变,所以我需要启动相对于getFile.php 的路径。希望我理解你的问题。
  • @MayankPandeyz 上面的代码只是返回点...
  • @g5wx 所以在你的情况下 getFile.php 在文件夹子文件夹 2.2 或子文件夹 2.2.2 中?那个目录很难命名?如果有人问您文件夹名称,只需说出文件夹名称.. 不要再开始谈论子文件夹/父文件夹。这只会让人们感到困惑,因为在您呈现的文件夹结构中,您大约有 4 个深度级别。

标签: php file directory


【解决方案1】:

使用此代码:

<?php
    $dir = getcwd(); // Getting the current working dir
    $di = new RecursiveDirectoryIterator($dir);
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
    // Get all files and folders within the working dir

    $files = [];
    foreach ($iterator as $filename => $file) {
        $path = pathinfo($filename);
        if ($path['basename'] == 'targetFile.txt') {
            echo $path['dirname'] .'<br />';
            //echo $path['dirname'], "\n";
            //echo $path['basename'], "\n";
            //echo $path['extension'], "\n";
            //echo $path['filename'], "\n"; // since PHP 5.2.0
        }
        $files[] = $filename;
    }
    //asort($files);
    //echo "<pre>"; print_r($files);die;
?>

更多信息:

http://php.net/manual/en/function.pathinfo.php

http://php.net/RecursiveDirectoryIterator

【讨论】:

  • 虽然您修复了if 语句问题,但代码仍然无法工作。问题:“目标文件始终位于与 getFile.php 位于同一父文件夹中的文件夹中。” - scandir 将能够找到脚本所在的文件夹,但不会再次扫描该文件夹以查找文件。
  • 钱德拉,这没有任何回应:/
  • 是的,效果很好。我已经从字符串中删除了点和反斜杠:echo str_replace('.\\', '', $path['dirname']); 并删除了 $files[] 数组。谢谢!
  • 附注我猜$dir = getcwd()$di = new RecursiveDirectoryIterator($dir); 也不需要并注释掉代码:)
  • 您可以评论此行:$di = new RecursiveDirectoryIterator($dir);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 2021-04-07
  • 2015-08-04
  • 2017-06-04
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多