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