我正在运行PHP版本5.2.11

当我运行以下功能时:

function get_dirs($path = '.') {
    $dirs = array();
    foreach (new DirectoryIterator($path) as $file) {  // This is line 462.
        if ($file->isDir() && !$file->isDot()) {
            $dirs[] = $file->getFilename();
        }
    }
    return $dirs;
}


我收到此错误:

Fatal error: Uncaught exception 'RuntimeException' with message 'DirectoryIterator::__construct(/home/test/test.com/wp-content/themes/mytheme/images) [<a href='directoryiterator.--construct'>directoryiterator.--construct</a>]: failed to open dir: No such file or directory' in /home/test/test.com/testing123/wp-content/themes/mytheme/functions.php:462 Stack trace: #0 /home/test/test.com/testing123/wp-content/themes/mytheme/functions.php(462): DirectoryIterator->__construct('/home/test/wie...') #1 /home/test/test.com/testing123/wp-content/themes/mytheme/functions.php(31): get_dirs('/home/test/wie...') #2 /home/test/test.com/testing123/wp-settings.php(717): include('/home/test/wie...') #3 /home/test/test.com/testing123/wp-config.php(76): require_once('/home/test/wie...') #4 /home/test/test.com/testing123/wp-load.php(30): require_once('/home/test/wie...') #5 /home/test/test.com/testing123 in /home/test/test.com/testing123/wp-content/themes/mytheme/functions.php on line 462


更新:我在这里发现的问题是主题已安装在主URL的虚拟目录下。我的脚本期望主题安装在主根URL之外。

例如,在这种情况下,主题安装在:http://www.example.com/testing123/wp-content/themes/mytheme

但是,我期望这样:http://www.example.com/wp-content/themes/mytheme

所以...

我的路径功能失败,因为它没有考虑它可以安装在虚拟目录下。

我在提供此功能时如何解决这种情况?

$mydir = get_dirs("$_SERVER[DOCUMENT_ROOT]/wp-content/themes/mytheme/images");

function get_dirs ($path = '.') {
    $dirs = array();
    foreach (new DirectoryIterator($path) as $file) {
        if ($file->isDir() && !$file->isDot()) {
            $dirs[] = $file->getFilename();
        }
    }

    return $dirs;
}

最佳答案

将其包含在try-catch块中吗?

function get_dirs($path = '.') {
  $dirs = array();
  try{
    foreach (new DirectoryIterator($path) as $file) {  //this is line 462
    if ($file->isDir() && !$file->isDot()) {
      $dirs[] = $file->getFilename();
     }
   }
 } catch(Exception $e) {
   //log exception or process silently
   //just for test
   echo $e;
 }

 return $dirs;

10-05 20:33