repertoire sous repertoire fichiers et sommaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : repertoire sous repertoire fichiers et sommaire

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 11:19

OoOoOoOoh mon dieu ça marche ecrit exactement comme il faut a la generation en plus quel est ce miracle :priere: merci sujet over résolu :afraid: =D>

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 11:07

est ce qu en tout ça donnes ça j avou etre un peu perdu a force de modifier par exemple le $file->isFile() c est le contraire du is_dir?
oui enfin pour un SPLFileInfo la fonction c'est pas is_dir mais $file->isDir()

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 11:06

mon copier coller marche mal aujourd'hui :cry:

new RecursiveDirectoryIterator($source)
pas
new RecursiveDirectoryIterator(array($source))

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 11:02

est ce qu en tout ça donnes ça j avou etre un peu perdu a force de modifier par exemple le $file->isFile() c est le contraire du is_dir?
function PrepareTOCData ($source, $types){

	global $docsTOC;
	
	
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(array($source)), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
if ($file->isFile())
{
/* Comme $file n'est pas  forcément un fichier on a  besoin de le tester
si s'en est un on se contente de tester si l'extension de ce fichier est dans le tableau des extensions autorisées. 
*/
    if (in_array ( pathinfo($file, PATHINFO_EXTENSION), $types) ) {
// On construit $docsTOC "normalement"
        $docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Document',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => $file->getPathname(),
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
    }
	}
	else
	{
	//on rentre le dossier dans le tableau aussi en enlevant quelques infos
	$docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Dossier',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => '',
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
	}
}   
	
return true;	
}

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 10:52

a oui non en fait je voulais faire l inverse mais en echangeant les deux blocs ça coince pareil et apres ta solution (je l ai peut etre mis au mauvais endroit ) me donne le meme resultat

je me suis tromper c'est
$iterator     = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
j'avais mis RecursiveArrayterator au lieu de RecursiveDirectoryIterator

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 10:42

a oui non en fait je voulais faire l inverse mais en echangeant les deux blocs ça coince pareil et apres ta solution (je l ai peut etre mis au mauvais endroit ) me donne le meme resultat

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 10:40

essayes comme ca
function PrepareTOCData($source, $types)
{
    global $docsTOC;
    
    $iterator     = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
    
    foreach($iterator as $file)
    {
        $temp    = array('Label' => $file->getFilename(),
                        'ObjectType' => null,                    
                        'LIBELLE' => $file->getBasename(),
                        'FILENAME' => $file->getPathname(),
                        'REF' => '-',
                        'INDMAJ' => '',
                        'INDMIN' => '',
                        'DATEVERSION' => date("d/m/Y", $file->getMTime())
                        );
                        
        if ($file->isFile())
        {
            if (in_array(pathinfo($file, PATHINFO_EXTENSION), $types))
            {
                $temp['ObjectType'] = 'Document';
                $docsTOC[] = $temp;
            }
        }    
        else
        {
            $temp['ObjectType'] = 'Dossier';
            $temp['FILENAME'] = null;
            $docsTOC[] = $temp;
        }
    }      
    return true;   
}

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 10:35

ton is_dir n'est pas bon, tu test si c'est un dossier mais tu mets le bloque pour le fichier,
fais :
$file->isFile()

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 10:28

chez moi d'apres ce que j ai compris ça donne alors clairement ça mais je ne vois pas pourquoi j 'ai l'erreur bizarre en prenant en compte tout les cas
function PrepareTOCData ($source, $types){

	global $docsTOC;
	
	
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
if (is_dir($file))
{
/* Comme $file n'est pas  forcément un fichier on a  besoin de le tester
si s'en est un on se contente de tester si l'extension de ce fichier est dans le tableau des extensions autorisées. 
*/
    if (in_array ( pathinfo($file, PATHINFO_EXTENSION), $types) ) {
// On construit $docsTOC "normalement"
        $docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Document',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => $file->getPathname(),
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
    }
	}
	else
	{
	//on rentre le dossier dans le tableau aussi en enlevant quelques infos
	$docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Dossier',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => '',
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
	}
}   
	
return true;	
}

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 10:19

ca va allé chercher tout les fichiers et tout les dossiers récursivement, le SELF_FIRST c'est pour allé dans les dossiers qu'il trouve

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 10:09

peut tu m expliquer son fonctionnement parce qu ici en remplacant simplement la ligne j ai une erreur un peu bizarre
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Passed variable is not an array or object, using empty array instead' in C:\Program Files\EasyPHP-5.3.1\www\DataPackManager\actions\GenerateDataPack.php:212 Stack trace: #0 C:\Program Files\EasyPHP-5.3.1\www\DataPackManager\actions\GenerateDataPack.php(212): ArrayIterator->__construct('Z:\Users\Bastie...') #1 C:\Program Files\EasyPHP-5.3.1\www\DataPackManager\actions\GenerateDataPack.php(61): PrepareTOCData('Z:\Users\Bastie...', Array) #2 {main} thrown in C:\Program Files\EasyPHP-5.3.1\www\DataPackManager\actions\GenerateDataPack.php on line 212

Re: repertoire sous repertoire fichiers et sommaire

par stealth35 » 02 juin 2010, 10:04

c'est
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($source), RecursiveIteratorIterator::SELF_FIRST);

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 02 juin 2010, 08:49

alors les gens j'ai bidouillé un peu la solution et j'ai trouvé donc ça donnes ça j ai peut etre compliqué pour rien il faut me le dire si c est le cas mais c est fonctionnel :
function PrepareTOCData ($source, $types){

	global $docsTOC;
	
	
	//$iterator2 = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source));
	$iterator = new RecursiveDirectoryIterator($source);
foreach ($iterator as $file ) {
	if (is_dir($file))
		{
		$docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Document',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => $file->getPathname(),
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
		
		$iterator2 = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($file));
			foreach ( $iterator2 as $file2 ) {
/* Comme $file est forcément un fichier on n'a pas besoin de le tester
on se contente de tester si l'extension de ce fichier est dans le tableau des extensions autorisées. 
*/
    if (in_array ( pathinfo($file2, PATHINFO_EXTENSION), $types) ) {
// On construit $docsTOC "normalement"
        $docsTOC[] = array(
            'Label' => $file2->getFilename(),
            'ObjectType' => 'Document',
            'LIBELLE' => $file2->getBasename(),
            'FILENAME' => $file2->getPathname(),
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file2->getMTime() )
        );
    }
}
    }
	else
	{
	if (in_array ( pathinfo($file, PATHINFO_EXTENSION), $types) ) {
// On construit $docsTOC "normalement"
        $docsTOC[] = array(
            'Label' => $file->getFilename(),
            'ObjectType' => 'Document',
            'LIBELLE' => $file->getBasename(),
            'FILENAME' => $file->getPathname(),
            'REF' => '-',
            'INDMAJ' => '',
            'INDMIN' => '',
            'DATEVERSION' => date("d/m/Y", $file->getMTime() )
        );
	}
	}
	}
	// foreach ( $iterator2 as $file2 ) {
/* Comme $file est forcément un fichier on n'a pas besoin de le tester
on se contente de tester si l'extension de ce fichier est dans le tableau des extensions autorisées. 
*/
    // if (in_array ( pathinfo($file2, PATHINFO_EXTENSION), $types) ) {
// On construit $docsTOC "normalement"
        // $docsTOC[] = array(
            // 'Label' => $file2->getFilename(),
            // 'ObjectType' => 'Document',
            // 'LIBELLE' => $file2->getBasename(),
            // 'FILENAME' => $file2->getPathname(),
            // 'REF' => '-',
            // 'INDMAJ' => '',
            // 'INDMIN' => '',
            // 'DATEVERSION' => date("d/m/Y", $file2->getMTime() )
        // );
    // }
// }   
	
return true;	
}

ps a 9h44 c est pas si fonctionnel que ça parce que ce n est pas recursif si j ai un dossier qui contient des fichiers et un dossier qui contient a son tour des fichier et des dossiers il n affiche que les premiers dossiers j essai de changer ça mais je galere en fait quelqu un peut m aider :agenouille:

Re: repertoire sous repertoire fichiers et sommaire

par davidb » 01 juin 2010, 15:13

oki merci ça marche pas mal c est juste que pour filename il fallait utiliser getPathname ^^ et apres j aimerais si possible afficher le nom des dossiers sans faire forcement un lien mais c est optionnel mais si qqun sait le faire je ne suis pas contre

Re: repertoire sous repertoire fichiers et sommaire

par macgawel » 01 juin 2010, 12:13

1. Attention avec les itérateurs, ils ne sont disponibles que pour les dernières versions de PHP (>=5.1.3), et comme il n'y a pas de filtre sur le type de fichier, ça peut vite être gourmand...

2. En considérant que $source est le répertoire racine et $types un array contenant les extensions à chercher :

Code : Tout sélectionner

/* On crée un objet qui contiendra tous les fichiers contenus $source Par défaut il ne liste que les fichiers... Ca tombe bien ;-) */ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source)); foreach ($iterator as $file) { /* Comme $file est forcément un fichier on n'a pas besoin de le tester on se contente de tester si l'extension de ce fichier est dans le tableau des extensions autorisées.  */     if (in_array ( pathinfo($file, PATHINFO_EXTENSION), $types) ) { // On construit $docsTOC "normalement"         $docsTOC[] = array(             'Label' => $file->getFilename(),             'ObjectType' => 'Document',             'LIBELLE' => $file->getBasename(),             'FILENAME' => $file->getBasename(),             'REF' => '-',             'INDMAJ' => '',             'INDMIN' => '',             'DATEVERSION' => date("d/m/Y", $file->getMTime() )         );     } }