Проверить пустая ли директория php

Невозможно проверить, пуста ли папка

У меня есть веб-сайт на общем сервере, и я хочу проверить, пуста ли конкретная папка. Я перепробовал как минимум 5 способов. Тестирую две папки. И пустую одну и одну с файлом.

$userid = '000019'; //000019 is empty, 000021 has one file $server_dir = $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $dir = $server_dir . "/Trips/".$userid."/"; echo 'DIR: '.$dir; //www.example.com/Trips/000019/ 
function checkFolderIsEmptyOrNot ( $folderName ) < $files = array (); if ( $handle = opendir ( $folderName ) ) < while ( false !== ( $file = readdir ( $handle ) ) ) < if ( $file != "." && $file != ".." ) < $files [] = $file; >> closedir ( $handle ); > return ( count ( $files ) > 0 ) ? TRUE: FALSE; > if (checkFolderIsEmptyOrNot($dir)) < echo 'X'; >else < echo 'Y'; >echo 'EMPTY?: '.checkFolderIsEmptyOrNot($dir); //always Y 
function dir_is_empty($path) < $empty = true; $dir = opendir($path); while($file = readdir($dir)) < if($file != '.' && $file != '..') < $empty = false; break; >> closedir($dir); return $empty; > echo 'EMPTY?: '.dir_is_empty($dir).'
'; //always 1
function is_dir_empty($dir) < if (!is_readable($dir)) return NULL; return (count(scandir($dir)) == 2); >if (is_dir_empty($dir)) < echo "the folder is empty"; >else < echo "the folder is NOT empty"; //always NOT empty >

И так далее. В чем может быть проблема? Что мне здесь не хватает?

Когда я открываю www.example.com/Trips/000019/ в браузере, он говорит, что у меня нет доступа к этой папке. Хотя я могу получить доступ к файлу внутри папки, например www.example.com/Trips/000019/a.pdf

С вашей помощью, ребята, это глобальный код, который сообщает всем папкам, что они не пустые:

'; $files = array(); if ($dh = opendir($dir)) < while (false !== ($file = readdir($dh))) < if ($file != "." && $file != "..") $files[] = $file; >> print_r($files); if (count(glob($dir)) === 0 ) < echo "the folder is empty"; >else < echo "the folder is NOT empty"; >?> 
000019 DIR: /home/myusername/public_html/Trips/000019/ Array ( ) the folder is NOT empty 

Источник

Читайте также:  Python thread обмен данными

Проверить, пуста ли папка, выводит ошибку (PHP)

У меня есть код, чтобы проверить, пуст ли каталог, чтобы я мог выполнять действия, но этот простой код дает ошибку:

Предупреждение: opendir (/Site/images/countries/abc/a/2.swf,/Site/images/countries/abc/a/2.swf) [function.opendir]: система не может найти указанный путь. (код: 3) в C: \ wamp \ www \ Site \ index.PHP в строке 374 Такого файла нет

function IsNotEmpty($folder) < $files = array (); if ( $handle = opendir ( $folder ) ) < while ( false !== ( $file = readdir ( $handle ) ) ) < if ( $file != "." && $file != ".." ) < $files [] = $file; >> closedir ( $handle ); > return ( count ( $files ) > 0 ) ? TRUE: FALSE; > $dir ="/Site/images/countries/abc/a/2.swf"; if (IsNotEmpty($dir)==true) < echo "There is no such file"; >else < echo "The file exists!"; >; 

Ответы (4)

opendir предназначен для открытия каталогов, а не файлов 🙂 Вы также можете попробовать временно добавить отладочную информацию, чтобы видеть, что происходит:

function IsNotEmpty ($folder) < $files = array (); if ($handle = opendir ($folder)) < echo "DEBUG opened okay "; while (false !== ($file = readdir ($handle))) < if ( $file != "." && $file != ".." ) < $files [] = $file; echo "DEBUG got a file "; >> closedir ($handle); > else < echo "DEBUG cannot open "; >return (count($files) > 0 ) ? TRUE : FALSE; > $dir ="/Site/images/countries/abc/a"; if (IsNotEmpty($dir)) < echo "There is no such file"; >else

Если это по-прежнему не работает, и вы уверены, что каталог существует (помните, что регистр важен для UNIX), вы можете проверить разрешения для этого каталога, чтобы убедиться, что идентификатор пользователя, пытающийся получить к нему доступ, разрешен.

Что ты имеешь в виду? Я пробовал использовать $dir =»/Site/images/countries/abc/a/»; , но это та же ошибка. — person Christine; 20.06.2011

@Christine, если это так, то вам также нужно проверить разрешения. — person paxdiablo; 20.06.2011

@Christine, тогда вам нужно (1) проверить, действительно ли каталог существует; и (2) проверьте, есть ли у пользователя права на его поиск (выполнение). Возможно, быстрый способ проверить это временно установить $dir = «/tmp»; , поскольку почти каждый должен иметь там права поиска. — person paxdiablo; 20.06.2011

$aFiles = glob($sFolder); return (sizeof($aFiles) < 1) true : false; 

Источник

Проверка на наличие файлов в директории и их скачивание

Привет всем. Помогите пожалуйста с вопросом.
Нужно осуществить следующее:
Сначала проверить пуста ли директория или нет, и если она не пуста, то отобразить ссылку на файл, который находится в этой категории. В директории может быть только 1 файл.

Есть только простой код, который проверяет пуста ли директория или нет:

 $files = glob("folder/*.*"); if (empty($files)) { echo "Пусто"; } ?>

Проверка на наличие файлов
Как можно сделать проверку на наличие большого количества файлов при учете того, что есть их.

Проверка на наличие файлов при принятии файла через POST
Добрый день. Я отправляю файл через стороннюю программу, и принимаю файл через скрипт <?php .

Скачивание файла из другой директории!
Здравствуйте. В общем, у меня есть скрипт чтения файлов и вывода в список, также их можно скачать.

Проверка наличия файлов в директории
Всем привет. Возникли сложности, помогите, пожалуйста) Необходимо добавить код в приложение.

Источник

Как я могу использовать PHP, чтобы проверить, пуст ли каталог?

Я использую следующий скрипт для чтения каталога. Если в каталоге нет файла, он должен быть пустым. Проблема в том, что он просто продолжает говорить, что каталог пуст, хотя внутри есть файлы и наоборот.

14 ответов

кажется, что вам нужно scandir вместо glob, так как glob не может видеть скрытые файлы unix.

else < echo "the folder is NOT empty"; >function is_dir_empty($dir) < if (!is_readable($dir)) return NULL; return (count(scandir($dir)) == 2); >?> 

обратите внимание, что этот код не является вершиной эффективности, так как нет необходимости читать все файлы только для того, чтобы сказать, если каталог пуст. Таким образом, лучшая версия будет

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

кстати, не используйте слова заменить boolean значения. Сама цель последнего состоит в том, чтобы сказать вам, если что-то пустое или нет. Ан

выражение уже возвращает Empty или Non Empty С точки зрения языка программирования, FALSE или TRUE соответственно-таким образом, вы можете использовать сам результат в структурах управления, таких как IF() без каких-либо промежуточных значений

Я думаю, используя FilesystemIterator должен быть самый быстрый и простой способ:

// PHP 5 >= 5.3.0 $iterator = new \FilesystemIterator($dir); $isDirEmpty = !$iterator->valid(); 

или использование доступа члена класса при создании экземпляра:

// PHP 5 >= 5.4.0 $isDirEmpty = !(new \FilesystemIterator($dir))->valid(); 

это работает, потому что новый FilesystemIterator первоначально указывала на первый файл в папке, если нет файлов в папке valid() вернутся false . (см. документацию здесь.)

как указал абдулманов.ilmir, дополнительно проверьте, если каталог существует перед использованием FileSystemIterator потому что иначе он бросит UnexpectedValueException .

Источник

Оцените статью