Как проверить существование директории php

is_dir

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

Возвращаемые значения

Возвращает TRUE , если файл существует и является директорией, иначе возвращается FALSE .

Примеры

Пример #1 Пример использования функции is_dir()

var_dump ( is_dir ( ‘a_file.txt’ ));
var_dump ( is_dir ( ‘bogus_dir/abc’ ));

var_dump ( is_dir ( ‘..’ )); // на одну директорию выше
?>

Результат выполнения данного примера:

bool(false) bool(false) bool(true)

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примечания

Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в Поддерживаемые протоколы и обработчики (wrappers).

Смотрите также

  • chdir() — Изменяет каталог
  • dir() — Возвращает экземпляр класса Directory
  • opendir() — Открывает дескриптор каталога
  • is_file() — Определяет, является ли файл обычным файлом
  • is_link() — Определяет, является ли файл символической ссылкой

Источник

is_dir

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

Возвращаемые значения

Возвращает true , если файл существует и является директорией, иначе возвращается false .

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примеры

Пример #1 Пример использования функции is_dir()

var_dump ( is_dir ( ‘a_file.txt’ ));
var_dump ( is_dir ( ‘bogus_dir/abc’ ));

var_dump ( is_dir ( ‘..’ )); // на одну директорию выше
?>

Результат выполнения данного примера:

bool(false) bool(false) bool(true)

Примечания

Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обёртками url. Список обёрток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обёртки.

Смотрите также

  • chdir() — Изменяет каталог
  • dir() — Возвращает экземпляр класса Directory
  • opendir() — Открывает дескриптор каталога
  • is_file() — Определяет, является ли файл обычным файлом
  • is_link() — Определяет, является ли файл символической ссылкой

User Contributed Notes 21 notes

Just a note for anyone who encounters is_dir() returning false on CIFS mount points or directories within those mount points on 2.6.31 and newer kernels: Apparently in new kernels they’ve started using the CIFS serverino option by default. With Windows shares this causes huge inode numbers and which apparently can cause is_dir() to return false. Adding the noserverino option to the CIFS mount will prevent this. This may only occur on 32 systems but I don’t have a 64 bit install to test against.

Note that on Linux is_dir returns FALSE if a parent directory does not have +x (executable) set for the php process.

My solution to the problem that you must include the full path to make «is_dir» work properly as a complete example:

$i=0;
while($i <=$files_n)// "is_dir" only works from top directory, so append the $dir before the file
if (is_dir($dir.’/’.$files[$i])) <
$MyFileType[$i] = «D» ; // D for Directory
> else $MyFileType[$i] = «F» ; // F for File
>
// print itemNo, itemType(D/F) and itemname
echo ‘
‘.$i.’. ‘. $MyFileType[$i].’. ‘ .$files[$i] ;
$i++;
>
?>

This is the «is_dir» function I use to solve the problems :

I can’t remember where it comes from, but it works fine.

Note that is_dir() also works with ftp://.

if( is_dir ( ‘ftp://user:pass@host/www/path/to/your/folder’ )) // Your code.
>
?>

But note that if the connexion fails due to invalide credentials, this will consider that the folder doesn’t exist and will return FALSE.

When trying (no ‘pear’) to enumerate mounted drives on a win32 platform (Win XP SP3, Apache/2.2.11, PHP/5.2.9), I used:

for( $c = ‘A’ ; $c if( is_dir ( $c . ‘:’ ))
echo $c . ‘: ‘ ;
>
?>

which yielded:
A: C: D: E: F: G: H: I:

Running PHP 5.2.0 on Apache Windows, I had a problem (likely the same one as described by others) where is_dir returned a False for directories with certain permissions even though they were accessible.

Strangely, I was able to overcome the problem with a more complete path. For example, this only displays «Works» on subdirectories with particular permissions (in this directory about 1 out of 3):

$d = opendir(«./albums/mydir»);
while(false !== ($f = readdir($d))) echo «


«;
if(is_dir($f)) echo «Works:» . $f . ««;
>
>

However, this works properly for all directories:

$d = opendir(«./albums/mydir»);
while(false !== ($f = readdir($d))) echo «


«;
$dName = «./albums/mydir/» . $f;
if(is_dir($dName)) echo «Works:» . $dName . ««;
>
>

I don’t understand the hit-and-miss of the first code, but maybe the second code can help others having this problem.

PITFALL in sub dir processing

After struggeling with a sub-dir processing (some subdirs were skipped) AND reading the posts, I realized that virutally no-one clearly told what were wrong.

opendir(«myphotos»); // Top dir to process from (example)

if ($fname == ‘.’) continue; // skip dirs . and .. by first char test

if (is_dir($fname)) call_own_subdir_process; // process this subdir by calling a routine

The «is_dir()» must have the FULL PATH or it will skip some dirs. So the above code need to INSERT THE PATH before the filename. This would give this change in above.

if (is_dir(«myphotos\» . $fname)) call_own_subdir_process; // skip subdirs

The pitfall really was, that without full path some subdirs were found. hope this clears all up

One note regarding checking for empty directories :
>>echo (count(glob(«$dir/*»)) === 0) ? ‘Empty’ : ‘Not empty’;
This does not work correctly on Linux.
The ‘.’ and ‘..’ will always be returned even if no files are present in the directory.

is_dir() doesn’t work with a directory that has the name «0» (a single zero). Neither does realpath().

This is my experience with PHP 7.4.

Note that this functions follows symbolic links. It will return true if the file is actually a symlink that points to a directory.

An example:
symlink(«.», «testlink»);
var_dump(is_dir(«testlink»));
unlink(«testlink»);
?>

(Windows Note: Under recent versions of Windows you can set symlinks as long as you’re administrator, but you cannot remove directory symlinks with «unlink()», you will have to use «rmdir testlink» from the shell to get rid of it.)

Here is another way to test if a directory is empty, which I think is much simpler than those posted below:

$dir = ‘directory’ ;
echo ( count ( glob ( » $dir /*» )) === 0 ) ? ‘Empty’ : ‘Not empty’ ;
?>

Ah ha! Maybe this is a bug, or limitation to be more precise, of php. See http://bugs.php.net/bug.php?id=27792

A workaround is posted on the page (above) and seems to work for me:

function is_dir_LFS($path) return ((‘d’==substr(exec(«ls -dl ‘$path'»),0,1))?(true):(false));
>

PS: I’m using PHP 4.3.10-16, posts report this problem up to 5.0

this function bypasses open_basedir restrictions.
function my_is_dir($dir)
// bypasses open_basedir restrictions of is_dir and fileperms
$tmp_cmd = `ls -dl $dir`;
$dir_flag = $tmp_cmd[0];
if($dir_flag!=»d»)
// not d; use next char (first char might be ‘s’ and is still directory)
$dir_flag = $tmp_cmd[1];
>
return ($dir_flag==»d»);
>
?>

example:
.
echo is_dir(«/somewhere/i/dont/have/access/to»);
?>
output:
Warning: open_basedir restriction in effect

.
echo my_is_dir(«/somewhere/i/dont/have/access/to»);
?>
output:
true (or false, depending whether it is or not. )


visit puremango.co.uk for other such wonders

Note that there quite a few articles on the net that imply that commands like is_dir, opendir, readdir cannot read paths with spaces.

On a linux box, THAT is not an issue.

$dir = «Images/Soma ALbum Name with spaces»;

// Open a directory, and read its contents
if (is_dir($dir)) echo $dir.»
«; // will not appear if above fails
if ($dh = opendir($dir)) echo $dir.»
«; // will not appear if above fails
while (($file = readdir($dh)) !== false) echo «filename:» . $file . «
«;
echo $dir.»
«; // will not appear if above fails
>
closedir($dh);
>
>

use this function to get all files inside a directory (including subdirectories)

function scan_Dir ( $dir ) $arrfiles = array();
if ( is_dir ( $dir )) if ( $handle = opendir ( $dir )) chdir ( $dir );
while ( false !== ( $file = readdir ( $handle ))) <
if ( $file != «.» && $file != «..» ) <
if ( is_dir ( $file )) <
$arr = scan_Dir ( $file );
foreach ( $arr as $value ) $arrfiles [] = $dir . «/» . $value ;
>
> else $arrfiles [] = $dir . «/» . $file ;
>
>
>
chdir ( «../» );
>
closedir ( $handle );
>
return $arrfiles ;
>

An even better (PHP 5 only) alternative to «Davy Defaud’s function»:

function is_empty_dir ( $dir )
if (( $files = @ scandir ( $dir )) && count ( $files ) <= 2 ) return true ;
>
return false ;
>
?>

NOTE: you should obviously be checking beforehand if $dir is actually a directory, and that it is readable, as only relying on this you would assume that in both cases you have a non-empty readable directory.

Источник

Как проверить существование директории php

Пока я творю, я живу!
Блог посвящен: HTML, CSS, PHP, WordPress, Bootstrap

Главная » Основы PHP » Создание, проверка и удаление каталога (папки) посредством кода PHP. Основы PHP с нуля. Урок №23

Создание, проверка и удаление каталога (папки) посредством кода PHP. Основы PHP с нуля. Урок №23

Создание, проверка и удаление каталога (папки) посредством кода PHP. Основы PHP с нуля. Урок №23

Всем привет!
Продолжаем изучать основы PHP с нуля! В этом уроке я расскажу вам про возможность создания каталога (папки), проверка на существования папки, а также ее удаление.
Начну пожалуй из создания папки.

Создание папки в PHP

Чтобы создать папку, воспользуйтесь функцией mkdir() .

pathname – название папки.
mode – права на папку. Если не указать этот параметр, то папка будет создана с правами « 0777 ».

В результате, после запуска скрипта, вы увидите папку с названием « stepkinblog ».

Если хотите создать несколько директорий ( папка в папке ), тогда воспользуйтесь вот таким способом:

В результате, вы увидите папку «Stepkinblog1». Открыв ее, вы увидите папку «Stepkinblog2» внутри которой будет еще одна папка «Stepkinblog3».

Как проверить, существует ли папка в PHP?

Чтобы проверить, существует ли папка, воспользуйтесь функцией is_dir() .

Использовал конструкцию if else.
В результате, если папка « stepkinblog » существует, то на экране вы увидите соответствующее сообщение « папка существует » или « папки нет ».

Удалить папку в PHP

Чтобы удалить папку, воспользуйтесь функцией rmdir() .

После запуска скрипта, папка « stepkinblog » будет удалена.
Для развлечения, вот комбинированный код, который включает в себя проверку, создания и удаление папки:

На сегодня все!
Подписывайтесь на обновления блога stepkinblog.ru, если не хотите пропустить уроки по основам PHP!

Случайные записи:

Источник

Читайте также:  Python коды русского алфавита
Оцените статью