【问题标题】:php get full path of file in a folderphp获取文件夹中文件的完整路径
【发布时间】:2015-06-15 20:23:14
【问题描述】:

我有一个名为 data 的文件夹。在这个 data 文件夹中,有文件和文件夹。在这个文件夹中有文件和文件夹......继续这样......

我需要获取所有文件路径(包括子目录的文件)。 我有一个php代码:

function dirToArray($dir) {
    $contents = array();
    foreach (scandir($dir) as $node) {
        if ($node == '.' || $node == '.htaccess' || $node == '..' || $node == '.tmb' || $node == '.quarantine') continue;
        if (is_dir($dir . '/' . $node)) {
            $contents[$node] = dirToArray($dir . '/' . $node);
        } else {
            $contents[] = $node;
        }
    }
    return $contents;
}
$fileData = dirToArray( '/var/www/image/data/' );
print_r($fileData);

输出在this 链接上。它给了我一个像这样的 data 文件夹树:

Array
(
    [04.2014] => Array
        (
            [C] => Array
                (
                    [0] => AMANFTR105260005_001.jpg
                    [Acki] => Array
                        (
                            [0] => 10269990_1407183112891667_859040604_n.jpg
                            [1] => 10287174_1407183106225001_914722369_n.jpg
                            [2] => 10307039_1407183109558334_889879385_n.jpg
                            [3] => 10318614_1407183099558335_776826424_n.jpg
                            [25763] => Array
                                (
                                    [0] => 10268126_1407184372891541_1399955485_n.jpg
                                    [1] => 10268256_1407184362891542_462829886_n.jpg
                                    [2] => 10318854_1407184356224876_1056593541_n.jpg
                                    [3] => photo.jpg
                                )

                            [73085] => Array
                                (
                                    [0] => 10261927_1407212376222074_295083908_n.jpg
                                    [1] => 10268368_1407212366222075_706285245_n.jpg
                                    [2] => 10299493_1407212372888741_1318245049_n.jpg
                                    [3] => 10318719_1407212379555407_451060715_n.jpg
                                )

但我想要这个数组:

Array
(
[0] => /var/www/image/data/04.2014/C/AMANFTR105260005_001.jpg
[1] => /var/www/image/data/04.2014/C/Acki/10269990_1407183112891667_859040604_n.jpg
[2] => /var/www/image/data/04.2014/C/Acki/10287174_1407183106225001_914722369_n.jpg

...

[223] => /var/www/image/data/logo.gif
)

【问题讨论】:

  • 您是否考虑过使用RecursiveDirectoryIterator?这是an example
  • 无论从 else 语句如何,您都将 $node 插入到内容中,这意味着您的第二个 if 语句可能不会通过,请尝试调试。

标签: php spl scandir


【解决方案1】:
<?php

$path = dirname(__FILE__);
$objects = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($objects as $file => $object) {
    $basename = $object->getBasename();
    if ($basename == '.' or $basename == '..') {
        continue;
    }
    if ($object->isDir()) {
        continue;
    }
    $fileData[] = $object->getPathname();
}
var_export($fileData);

【讨论】:

    【解决方案2】:

    只有几厘米。

    与@dyachenko 的 OP 中的内容相同。 您正在检查 is_dir() 同时添加 $node 作为要检查的文件名,这意味着这永远不会是真的,因为您总是在获取文件。 第二: if 语句中的 dirToArray() 完全没有意义,因为在运行$content[] = $dir . '/' . $node 之前它不会做任何事情,如果 if 语句为真则不会运行。

    所以正确的代码是:

    function dirToArray($dir, &$contents) {
    
        foreach (scandir($dir) as $node) {
            if ($node == '.' || $node == '.htaccess' || $node == '..' || $node == '.tmb' || $node == '.quarantine') continue;
            if (is_dir($dir)) {
              $contents[] = $dir . '/' . $node;
            }
            else {
              //error or what ever
            }
        }
    
    }
    
    $contents = array();
    dirToArray( '/var/www/html/UusProjekt/intl', $contents );
    print_r($contents);
    

    【讨论】:

      【解决方案3】:
      function dirToArray($dir, &$contents) {
      
          foreach (scandir($dir) as $node) {
              if ($node == '.' || $node == '.htaccess' || $node == '..' || $node == '.tmb' || $node == '.quarantine') continue;
              if (is_dir($dir . '/' . $node)) {
                  dirToArray($dir . '/' . $node, $contents);
              } else {
                  $contents[] = $dir . '/' . $node;
              }
          }
      
      }
      
      $contents = array();
      dirToArray( '/var/www/image/data/', $contents );
      print_r($contents);
      

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        相关资源
        最近更新 更多