PHP.mk документација

is_dir

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.is-dir.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.is-dir.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
is_dir

Референца за `function.is-dir.php` со подобрена типографија и навигација.

function.is-dir.php

is_dir

(PHP 4, PHP 5, PHP 7, PHP 8)

is_dirПроверува дали името на датотеката е директориум

= NULL

is_dir(string $filename): bool

Проверува дали даденото име на датотека е директориум.

Параметри

filename

Патека до датотеката. Ако filename е релативно име на датотека, ќе се провери релативно до тековната работна директорија. Ако filename е симболична или тврда врска, тогаш врската ќе биде решена и проверена. Ако сте овозможиле open_basedir може да важат дополнителни ограничувања.

Вратени вредности

Патеката до PHP скриптата што треба да се провери. true ако името на датотеката постои и е директориум, false otherwise.

Errors/Exceptions

Бидејќи типот на податоци integer во PHP е со знакот и многу платформи користат 32-битни integers, некои функции за датотечниот систем може да вратат неочекувани резултати за датотеки поголеми од 2GB. E_WARNING се емитува.

Примери

Пример #1 is_dir() example

<?php
var_dump
(is_dir('a_file.txt'));
var_dump(is_dir('bogus_dir/abc'));

var_dump(is_dir('..')); //one dir up
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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

Белешки

Забелешка: Имајте предвид дека резолуцијата на времето може да се разликува од еден датотечен систем до друг. clearstatcache() за повеќе детали.

Совети

Резултатите од оваа функција се кеширани. Погледнете some Од PHP 5.0.0, оваа функција може да се користи и со Поддржани протоколи и обвивки URL обвивки. Погледнете stat() за да се утврди кои обвивки поддржуваат

Види Исто така

  • chdir() - Промени директориум
  • dir() - Врати инстанца од класата Directory
  • opendir() - Отвори рачка на директориум
  • is_file() - Кажува дали името на датотеката е обична датотека
  • is_link() - Дали датотеката е симболичка врска

Белешки од корисници 20 белешки

томас на thomasnoest точка nl
пред 10 години
Note that on Linux is_dir returns FALSE if a parent directory does not have +x (executable) set for the php process.
sly на noiretblanc dot org
21 години пред
This is the "is_dir" function I use to solve the problems :

function Another_is_dir ($file)
{
    if ((fileperms("$file") & 0x4000) == 0x4000)
        return TRUE;
    else
        return FALSE;
}

or, more simple :

function Another_is_dir ($file)
{ 
return ((fileperms("$file") & 0x4000) == 0x4000);
}

I can't remember where it comes from, but it works fine.
digitalaudiorock на gmail точка com
пред 15 години
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.
jonlulf на gmail dot com
пред 10 години
My solution to the problem that you must include the full path to make "is_dir" work properly as a complete example:

    <? // findfiles.php  -  what is in directory "videoarchive"
    $dir    = 'images/videoarchive/'; // path from top
    $files = scandir($dir);
    $files_n = count($files);

    
    $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 '<br>'.$i.'. '. $MyFileType[$i].'. ' .$files[$i] ;
        $i++;
    }
    ?>
niceuser на live dot com
12 години пред
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.

The common traverse dir code was:
-----------------------------------------

opendir("myphotos"); // Top dir to process from (example)
 
while (false !== ($fname = readdir($h_dir))) { // process current dir (read a directory entry)

   if ($fname{0} == '.') continue; // skip dirs . and .. by first char test

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

   }

PROBLEM IS :

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
vstoykov на consultant dot bg
пред 16 години
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:

<?php
function echo_win_drives() {

  for($c='A'; $c<='Z'; $c++) 
    if(is_dir($c . ':'))
      echo $c . ': '; 
}
?>

which yielded:
A: C: D: E: F: G: H: I:
Ерик
19 години пред
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
gecko4 на gmail dot com
19 години пред
Here is another way to test if a directory is empty, which I think is much simpler than those posted below:

<?php
$dir = 'directory';
echo (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';
?>
danr на cvisual dot com dot com
пред 18 години
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 "<hr />";
        if(is_dir($f)) {
            echo "<b>Works:" . $f . "</b>";
        }
}

However, this works properly for all directories:

$d = opendir("./albums/mydir");
while(false !== ($f = readdir($d))) {
    echo "<hr />";
        $dName = "./albums/mydir/" . $f;
        if(is_dir($dName)) {
            echo "<b>Works:" . $dName . "</b>";
        }
}

I don't understand the hit-and-miss of the first code, but maybe the second code can help others having this problem.
Анонимен
пред 18 години
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.
puremango dot co dot uk на gmail dot com
21 години пред
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
musicmaster
пред 2 години
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.
jerome dot pros на gmail dot com
пред 7 години
Note that is_dir() also works with ftp://.

For example :

<?php 
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.
(PHP 4, PHP 5, PHP 7, PHP 8)
пред 10 години
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:
<php
symlink(".", "testlink");
var_dump(is_dir("testlink"));
unlink("testlink");
?>

Prints out:
bool(true)

(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.)
citizenmarco на gmail dot com
пред 9 години
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. 

Sample test code;

 $dir = "Images/Soma ALbum Name with spaces";
     

echo $dir."<br/>";

// Open a directory, and read its contents
if (is_dir($dir)){
  echo $dir."<br/>"; // will not appear if above fails
    if ($dh = opendir($dir)){
      echo $dir."<br/>"; // will not appear if above fails
      while (($file = readdir($dh)) !== false){
        echo "filename:" . $file . "<br>";
        echo $dir."<br/>"; // will not appear if above fails
      }
      closedir($dh);
    }
}
Виктор
пред 13 години
If you are using Mac, or others systems that store information about the directory layout and etc, the function:

   function empty_dir($dir) {
        if (($files = @scandir($dir)) && count($files) <= 3)
            return true;
        else
            return false;
    }

Must have the count($files) comparing with the number of hidden files!

For example, I'm using Mac and the empty directory shows me three files: ".", ".." and ".DS_Store", so if I am planning to put the website online on my Mac, I've to count in the ".DS_Store" file!
jasoneisen на gee mail
пред 17 години
An even better (PHP 5 only) alternative to "Davy Defaud's function": 

<?php
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.
Анонимен
21 години пред
Unfortunately, the function posted by p dot marzec at bold-sg dot pl does not work.
The corrected version is:

// returns true if folder is empty or not existing
// false if folde is full

function is_empty_folder($dir) {
if (is_dir($dir)) {
   $dl=opendir($dir);
   if ($dl) {
       while($name = readdir($dl)) {
   if (!is_dir("$dir/$name")) { //<--- corrected here
       return false;
       break;
       }
   }
       closedir($dl);
       }
   return true;
   } else return true;
}
Bjrn K.
пред 17 години
<?php
public static function isEmptyDir($dir){
     return (($files = @scandir($dir)) && count($files) <= 2);
}
?>

better ;)
tibard на gmail dot com
21 години пред
use this function to get all files inside a directory (including subdirectories)

<?php
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;
}

?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.