Функция is_file всегда возвращает false для третьего элемента массива - PullRequest
0 голосов
/ 25 ноября 2018

Это простая функция PHP для очистки всех пустых папок в каталоге.

Но третий элемент массива всегда принимает в качестве каталога, даже если это файл.

function myfunction($s){
    echo "<br>Now the directory is $s";
    echo "<br>";
    if (is_file($s)) {
        echo "$s is a file <br>";
        return;
    }
    else {
        echo "$s is a directory";
        chdir($s);
        $d = scandir(".");
        echo "<br> Array elements are ". print_r($d) . "<br>";
        echo sizeof($d);
        for ($i= 2; $i <sizeof($d); $i++) {
            $a = $d[$i];
            echo "<br>Now the folder is $a <br>";
            echo "<br>";
            if (empty($a)) {
                rmdir($a);
            }
            else{
                myfunction($a);
                chdir("..");
            }
        }
    }
}

1 Ответ

0 голосов
/ 25 ноября 2018

Функция empty() не проверяет содержимое каталога на пустоту, а только в том случае, если значение переменной пустое.Ваша переменная $a содержит имя файла текущей итерации, поэтому вы проверяете, есть ли у файла имя файла.Этого никогда не произойдет, поэтому вы всегда выполняете ветвь с рекурсивным вызовом.

В основном вам нужно посчитать количество записей, возвращаемых scandir() для каталога.Если conut 2, каталог пуст и может быть удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...