DirectoryIterator::isFile

(no version information, might be only in CVS)

DirectoryIterator::isFile --  Returns true if file is a regular file

Description

bool DirectoryIterator::isFile ( void )

警告

本函数暂无文档,仅有参数列表。


add a note add a note User Contributed Notes
kencomer at NOSPAM dot kencomer dot com
14-Sep-2005 09:49
I put in an example in __autoload, but it is useful here, too...

Yet another class/interface __autoload function. Includes an example usage of the SPL DirectoryIterator class, a settable case-ignore flag, and support for multiple file name patterns to allow easy integration from multiple sources.

<?php
/**
 * __autoload
 *
 * @author Ken Comer
 * @copyright released into public domain 2005 Ken Comer
 */

define('IGNORE_CASE',true);
// comment out the define() of IGNORE_CASE to be
//  case-sensitive. I like to ignore case so that I can
//  use UPPERCASE for the test versions of the file.

/**
 * autoloads classes and interfaces for PHP5
 *
 * @author Ken Comer
 */

function __autoload($class_name) {

 
// This will be set the first time through.
  // Put your default values in the place indicated
  //    below so as to eliminate possible duplicates
  //    in the .ini include_path
 
static $possible_path = NULL;
 
// Leave this as NULL.

 
  // List here whatever formats you use for your
  //    file names. Note that, if you autoload
  //    a class that implements a non-loaded interface,
  //    you will also need to autoload that interface.
 
static $permitted_formats = array(
  
"&CLASS.class.inc"
  
,"&CLASS.class.inc.php"
  
,"&CLASS.class.inc.php5"
  
,"class.&CLASS.inc"
  
,"class.&CLASS.inc.php"
  
,"class.&CLASS.inc.php5"
  
,"&CLASS.interface.inc"
  
,"&CLASS.interface.inc.php"
  
,"&CLASS.interface.inc.php5"
  
,"i&CLASS.interface.inc"
  
,"i&CLASS.interface.inc.php"
  
,"i&CLASS.interface.inc.php5"
 
);
 
//  Put the &CLASS wherever the $class_name
  //    might appear

  // Only executed the first time __autoload is called
 
if (NULL===$possible_path):
  
// These are the default paths for this application
  
$possible_path = array_flip(array(
      
"."
      
,".."
      
,"../include"
      
,"/public_html/php/include"
  
));
  
// Customize this yourself, but leave the
   //      array_flip alone. We will use this
   //      to get rid of duplicate entries from the
   //      include_path .ini list.

   // Merge the flipped arrays to get rid of duplicate
   //      "keys" (which are really the valid include
   //      paths) then strip out the keys leaving only
   //      uniques. This is marginally faster than
   //      using array_combine and array_unique and
   //      much more elegant. Okay, it's weird, too.
  
$possible_path = array_keys(array_merge($possible_path,
          
array_flip(explode(ini_get("include_path"),";"))));
  endif;
/* static $possible_path initialization */

 
$possibility = str_replace("&CLASS",$class_name,$permitted_formats);

  foreach (
$possible_path as $directory ) {
   if (!
file_exists($directory) or !is_dir($directory))
   {
     continue;
   }
  
$file_to_check = new DirectoryIterator($directory);

   foreach (
$file_to_check as $file ) {
    
// ignore directories and files that do not contain
     // $class_name
    
if ( !$file->isDir()
         and (
defined(IGNORE_CASE) && TRUE===IGNORE_CASE )
           ?
stripos($file->getFileName(),$class_name)
           :
strpos($file->getFileName(),$class_name) ) :
      
      
// class_name was included, now compare against
       // all permitted file name patterns
      
foreach ( $possibility as $compare ):
           if ((
defined(IGNORE_CASE) && TRUE===IGNORE_CASE )
               ? !
strcasecmp($compare,$file->getFileName())
               :
$compare===$file->getFileName()
           ) {
            
// by using $compare, you will get a qualified
             //    file name
            
include_once($compare);
             return
TRUE;
           }
       endforeach;
/* $possibility */

    
endif;
   }
/* foreach $file_to_check */
 
}
}
?>
ludvig dot ericson at gmail dot com
31-Aug-2005 07:29
Usage:
<?php
//open current directory
$dir = new DirectoryIterator(".");
// use do .. while since we need to iterate atleast once
// and the first two items are always "." and ".."
do  {
  
// if it isn't "." or ".."
  
if (!$dir->isDot()) {
      
// echo out pathname and "/" if it's a directory
      
echo $dir->getPathname() . ($dir->isDir() ? "/" : "");
   }
} while (
$dir->next())
?>

Outputs something like:
/path/file1
/path/dir1/
/path/file2
/path/file3
/path/dir2/

---
Note from the extension author:

Try this:

<?php
foreach(new DirectoryIterator(".") as $file)
{
   if (!
$file->isDot()) {
       echo
$file->getPathname() . ($file->isDir() ? "/" : "");
   }
}
?>