Jak użyć PHP, aby sprawdzić, czy katalog jest pusty?

Korzystam z następującego skryptu, aby odczytać katalog. Jeśli w katalogu nie ma pliku, należy powiedzieć, że jest pusty. Problem polega na tym, że po prostu mówi, że katalog jest pusty, mimo że w środku są pliki i na odwrót.

<?php
$pid    =       $_GET["prodref"];
$dir    =       '/assets/'.$pid.'/v';
$q     =        (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';

    if ($q=="Empty")
        echo "the folder is empty"; 
    else
        echo "the folder is NOT empty";
?>

1 odpowiedź

Wygląda na to, że potrzebujesz scandir zamiast glob, ponieważ glob nie widzi ukrytych plików unix.


<?php $pid = basename($_GET["prodref"]); $dir = "/assets/$pid/v"; if (is_dir_empty($dir)) { echo "the folder is empty"; }else{ echo "the folder is NOT empty"; } function is_dir_empty($dir) { if (!is_readable($dir)) return NULL; return (count(scandir($dir)) == 2); } ?>

Zauważ, że ten kod nie jest szczytem wydajności, ponieważ nie trzeba czytać wszystkich plików, aby stwierdzić, czy katalog jest pusty. Tak więc lepsza wersja byłaby taka:

function dir_is_empty($dir) {
  $handle = opendir($dir);
  while (false !== ($entry = readdir($handle))) {
    if ($entry != "." && $entry != "..") {
      closedir($handle);
      return FALSE;
    }
  }
  closedir($handle);
  return TRUE;
}

Nawiasem mówiąc, nie używaj słów do podstawiania wartości logicznych. Celem tego drugiego jest stwierdzenie, czy coś jest puste, czy nie. Na

a === b

wyrażenie już zwraca wartość Empty lub Non empty pod względem języka programowania, False lub True - więc możesz użyć tego wyniku w strukturach sterujących, takich jak IF () bez żadnych wartości pośrednich

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.