2014-10-02 6 views
1

Я написал функцию под названием getContents():функция getContents() возвращают неожиданные результаты

// Get contents of specific DIR. Will recur through all directories. 
function getContents($path, $skip_dir = FALSE, $skip_files = "", $dir_only = FALSE, $recurse = TRUE) 
{ if($skip_files == "") $skip_files = array(); 
    $getContentsTmp = array(); 
    foreach(scandir($path, 1) as $file) 
    { 
     if(($file != ".") && ($file != "..")) 
     { if((is_file($path . "/" . $file)) && (!in_array(pathinfo($path . "/" . $file,PATHINFO_EXTENSION),$skip_files)) && (!$dir_only)) { 
       array_push($getContentsTmp, $file); 
      } 
      if((is_dir($path . "/" . $file)) && (!$skip_dir)) { 
       if($recurse) { 
        $getContentsTmp[$file] = getContents($path . "/" . $file, $skip_files, $dir_only, $recurse); 
       } else { 
        array_push($getContentsTmp,$file); 
        // or $getContentsTmp[$file] = ""; 
       } 
      } 
     } 
    } 
    ksort($getContentsTmp); 
    return $getContentsTmp; 
} 

Он работал отлично в течение длительного времени. Но по какой-то причине я сейчас использую его в другом каталоге, и он не возвращает ожидаемых результатов. Я сузил его до переменной $dir_only. По какой-то причине он проходит как истинный, даже если я его не установлю. Я нигде не изменяю переменную, поэтому я не знаю, почему это происходит.

Вызов функции состоит в следующем:

$e = getContents("my_dir");

Если я эхо из результатов в функции, он видит все файлы и подпапке правильно, но когда он идет, чтобы вызвать функцию снова изнутри самого себя (после if($recurse)), он проходит через $ dir_only, но похоже, что он интерпретируется как истинный. Я не могу понять, почему.

ответ

4

Посмотрите на сколько параметров вы передаете:

getContents($path . "/" . $file, $skip_files, $dir_only, $recurse); 
        ^   ^  ^  ^
         1    2   3   4 

Посмотрите, сколько ваша функция принимает:

getContents($path, $skip_dir = FALSE, $skip_files = "", $dir_only = FALSE, $recurse = TRUE) 
      ^  ^   ^     ^   ^
      1   2    3      4    5 

Таким образом, в этом случае, вы вызываете функцию и пропустил $skip_dir, и, следовательно, к аргументу $dir_only применяется значение $recurse.

+1

Большое спасибо. Я бы никогда этого не видел :) – Chud37

Смежные вопросы