voila j'ai tres legerement modifie mon usine a gaz (on m'a toujours dit que j'etais brutal avce les moustiques)
au lieu d'enregistrer le nom du fichier dans le tableau $this->result
j'y enregistre l'objet RecursiveDirectoryIterator
mais l'ors du foreach impossibl d'acceder au metode de cet objet
class FileSysteme extends SingletonFactory implements IteratorAggregate
{
private $result = array();
private $filter = 'all';
private $countfile = 0;
private $countDir = 0;
public static $Type = 'File';
public function __construct(){
}
public static final function Singleton($instance_id = null){
return parent::Singleton(__CLASS__);
}
public function __set($name,$value){
switch ($name){
case 'filter':$this->filter = $value;break;
default:break;
}
}
public function listDirectory( $dirname , $recursif = false){
$dir = new RecursiveDirectoryIterator( $dirname );
if( $recursif ){
self::getFilesRecursif($dir);
}
else{
self::getFiles($dir);
}
}
private function getFiles(RecursiveDirectoryIterator $rdi ){
if($rdi instanceof RecursiveDirectoryIterator )
{
for ($rdi->rewind();$rdi->valid();$rdi->next()){
if(!$rdi->isDot()){
if(FileSysteme::$Type === 'File' && $rdi->isFile){
$this->getFile($rdi);
}elseif (FileSysteme::$Type === 'Directory' && $rdi->isDir){
$this->getDir($rdi);
}
}
}
}
}
private function getFilesRecursif(RecursiveDirectoryIterator $rdi,$depth=0) {
if($rdi instanceof RecursiveDirectoryIterator )
{
for ($rdi->rewind();$rdi->valid();$rdi->next()) {
if ($rdi->isDot()){
continue;
}
if ($rdi->isDir() || $rdi->isFile() ) {
if(FileSysteme::$Type === 'File' && $rdi->isFile()){
$this->getFile($rdi);
}elseif (FileSysteme::$Type === 'Directory' && $rdi->isDir()){
$this->getDir($rdi);
}
if ($rdi->hasChildren()){
self::getFilesRecursif($rdi->getChildren(),1+$depth);
}
}
}
}
}
private function getFile(RecursiveDirectoryIterator $rdi){
if($rdi->isFile() && is_array($this->filter) && in_array($this->getExtention($rdi->current()),$this->filter)){
$this->countfile++;
$this->result[] = (object)$rdi;
}
elseif ($rdi->isFile() && $this->filter == 'all'){
$this->countfile++;
$this->result[] = (object)$rdi;
}
}
private function getDir(RecursiveDirectoryIterator $rdi){
if($rdi->isDir()){
$this->countDir++;
$this->result[] = (object)$rdi;
}
}
public function getfileNumber(){
return $this->countfile;
}
public function getDirNumber(){
return (int)$this->countDir;
}
private function getExtention( $filename ){
if(is_file($filename)){
$tableau = explode('.',$filename);
return (string) array_pop($tableau);
}
else {
return true;
}
}
public function getIterator(){
$iterator = new Iterators($this->result);
return $iterator;
}
}
?>
?php
function __autoload($class){
if($class !==""){
require_once $class.'.class.php';
}
}
$bench = bench::Singleton();
$bench->startBench();
//require_once dirname(__file__).'/FileSysteme/FileSysteme.class.php';
//set_time_limit(360);
$dir = new FileSysteme();//::Singleton();
FileSysteme::$Type = 'File';
//$dir = new FileSysteme();
$dir->filter = array('php');
$bench->addEvent('c\'est partie');
//$dir->set('type','File');
//$dir->set('filter',array('php'));
$dir->listDirectory('e:wamp/www',true);
$bench->addEvent('stop');
foreach ($bench as $value) {
print_r($value);
}
foreach ($dir as $val){
echo var_dump($val);
echo $val->current();
//echo $val->current()/*.'---'.$val->getSize().'---'.$val->getType().'<br/>'*/;
}
echo $dir->getFileNumber();
?>
voici l'erreur obtenu
et des info sur RecursiveDirectoryIterator<b>Fatal error</b>: Uncaught exception 'RuntimeException' with message 'Could not open file' in E:\parser\index.php:30
Stack trace:
#0 E:\parser\index.php(30): RecursiveDirectoryIterator->current()
#1 {main}
thrown in <b>E:\parser\index.php</b> on line <b>30</b><br />
merci