【问题标题】:Foreach file in root directory and all sub directories根目录和所有子目录中的 foreach 文件
【发布时间】:2013-11-09 15:27:02
【问题描述】:

我想include 我项目中每个目录中的每个文件。我目前拥有的是,我 include 来自特定目录的每个文件

foreach (glob("*.php") as $filename)
{
    include_once $filename;
}

但我也想对我拥有的每个目录以及其中的所有文件执行相同的操作。我听说过 __autoload 函数,但有时我也需要它用于非类函数。

【问题讨论】:

    标签: php file include


    【解决方案1】:

    On this man page,第一条注释给出了一个递归列出所有文件的函数。只需调整它以满足您的需求:

    <?php
    function include_all_php_files($dir)
    {
        $root = scandir($dir);
        foreach($root as $value)
        {
            if($value === '.' || $value === '..') {continue;}
            if(is_file("$dir/$value") && preg_match('#\.php$#', $value))
            {
                include_once ("$dir/$value");
                continue;
            }
            include_all_php_files("$dir/$value");
        }
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      递归是你的朋友。

      /**
       * @param string path to the root directory 
       */
      function include_files($dir) {
          foreach (glob($dir . "/*") as $file) {
              if(is_dir($file)){
                 include_files($file);
              } else {
                 include_once($file);
              }
          }
      }
      

      【讨论】:

      • 嘿。 include_files 到底是做什么的?因为它告诉我未知功能include_files
      • 那是不可能的。但是无论如何,如果您不了解递归,请使用@jerska 的答案。它开箱即用。我的想法很粗糙,因为我认为你可以根据自己的需要调整这个想法。
      • 我的答案其实也是递归函数。
      • @Jerska 是的,我知道。只是您可以立即使用文件类型检查。老实说,我不知道他为什么没有定义 include_files。
      • 我很确定他没有完全复制/粘贴你的函数,因为它有效。
      【解决方案3】:

      试试这个。这对我有用。

      $accepted_extension = array("jpeg", "jpg", "gif", "bmp", "png");
      $return = array();
      
      $results = scandir($folder);
      foreach ($results as $result) {
          if ($result == '.' or $result == '..')
              continue;
          else if (is_dir($folder . '/' . $result))
              continue;
          else {
              $extn = substr($result, strpos($result, ".") + 1);
              if (in_array($extn, $accepted_extension)) {
                  $return[] = $result;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-14
        • 2016-11-07
        • 2012-09-02
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多