Это простая функция 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("..");
}
}
}
}






Функция empty() не проверяет содержимое каталога на пустоту, но только если значение переменной пусто. Ваша переменная $a содержит имя файла текущей итерации, поэтому вы проверяете, имеет ли файл имя файла. Этого никогда не произойдет, поэтому вы всегда выполняете ветку с рекурсивным вызовом.
По сути, вам нужно подсчитать количество записей, которые scandir() возвращает для каталога. Если conut - 2, каталог пуст и может быть удален.
@rexon вы можете отредактировать свой вопрос с помощью обновленного кода? Я на 83% уверен, что проблема заключается в использовании empty() вместо подсчета записей в каталоге.
Я изменился. но все равно результат такой же