note 56758 added to function.directoryiterator-isfile

From: Date: Wed, 14 Sep 2005 13:49:34 +0000
Subject: note 56758 added to function.directoryiterator-isfile
Groups: php.notes 
Request: Send a blank email to php-notes+get-95168@lists.php.net to get a copy of this message
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 */ } } ?> ---- Manual Page -- http://www.php.net/manual/en/function.directoryiterator-isfile.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+56758 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+56758&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+56758&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#95168) next »