[PHP] Tri Extension

Résolu/Fermé
thepchou Messages postés 71 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 20 mai 2008 - 14 juin 2007 à 10:35
SRN Messages postés 95 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 10 mars 2008 - 28 nov. 2007 à 12:15
J'ai un programme qui liste les fichiers et les dossiers. Mon programme est assez dynamique. Mais j'ai des consignes assez clair :

-> Afficher le nombre d'extension identique dans le dossier
ex: .txt = 5 ; .bmp = 7 ...

-> Je dois prendre les fichiers ayant la même extension et les afficher dans un tableau html à part de celui qui liste les dossiers.

-> Faire un lien d'extension, c'est à dire un lien .txt, lorsque je click dessus, il n'affiche que les fichiers .txt dans un tableau html.

Voici mon code qui liste les dossiers et fichiers

function addScheme($entry,$base,$type)
{
  $tab['name'] = $entry;
  $tab['type'] = filetype($base."/".$entry);
  $tab['date'] = filemtime($base."/".$entry);
  $tab['size'] = filesize($base."/".$entry);
  $tab['perms'] = fileperms($base."/".$entry);
  $tab['access'] = fileatime($base."/".$entry);
  $t = explode(".", $entry);
  $tab['ext'] = $t[count($t)-1];
  return $tab;
}

/* liste des dossiers */
function list_dir($base, $cur, $level=0)
{
  global $PHP_SELF, $BASE, $order, $asc;
  if ($dir = opendir($base)) {
    $tab = array();
    while($entry = readdir($dir))
	{
		if( is_dir($base."/".$entry) && !in_array($entry, array(".","..") ) )
		{
		$tab[] = addScheme($entry, $base, 'dir');
		}
    }
    /* tri */
    usort($tab,"cmp_name");
    foreach($tab as $elem)
	{
		$entry = $elem['name'];
		/* chemin relatif à la racine */
		$file = $base."/".$entry;
		/* marge gauche */
		for($i = 1 ; $i <= (4*$level) ; $i++)
		{
			echo " ";
		}
		/* l'entrée est-elle le dossier courant */
		if($file == $cur)
		{
			echo "<img src=\"dir-open.gif\" /> $entry<br />\n";
		} else
		{
			echo "<img src=\"dir-close.gif\" /> <a href=\"$PHP_SELF?dir=". rawurlencode($file) ."&order=$order&asc=$asc\">$entry</a><br />\n";
		}
		/* l'entrée est-elle dans la branche dont le dossier courant est la feuille */
		if(ereg($file."/",$cur."/"))
		{
			list_dir($file, $cur, $level+1);
		}
	}
    closedir($dir);
  }
}

/* liste des fichiers */
function list_file($cur)
{
global $PHP_SELF, $order, $asc, $order0;
  
	if ($dir = opendir($cur))
	{
		/* tableaux */
		$tab_dir = array();
		$tab_file = array();
		/* extraction */
		while($file = readdir($dir))
		{
			if(is_dir($cur."/".$file))
			{
				if( !in_array($file, array(".","..") ) )
				{
				  $tab_dir[] = addScheme($file, $cur, 'dir');
				}
			}else 
			{
				$tab_file[] = addScheme($file, $cur, 'file');
			}
		}
/* Contient encore plus de code, mais c'est inutile pour mon problème */

function assocExt($ext)
{
  $e = array(
    '' => "Unknown",
	'BAT' => "Batch file",
	'SYS' => "System File",
    'doc' => "Microsoft Word",
	'log' => "Log",
    'xls' => "Microsoft Excel",
    'ppt' => "Microsoft Power Point",
    'pdf' => "Adobe Acrobat",
    'zip' => "WinZip Archive",
    'txt' => "Document texte",
	'bmp' => "Bitmap",
    'gif' => "GIF Image",
    'jpg' => "JPEG Image",
    'png' => "PNG Image",
    'php' => "PHP Script",
    'php3' => "PHP Script",
    'htm' => "Web page",
    'html' => "Web page",
    'css' => "Cascading Style Sheet",
    'js' => "JavaScript"
  );
  if( in_array($ext, array_keys($e)) )
  {
    return $e[$ext];
  } else {
    return $e[''];
  }
}


Merci d'avance si vous arrivez à quelque chose !
A voir également:

3 réponses

thepchou Messages postés 71 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 20 mai 2008 25
14 juin 2007 à 13:27
En cherchant sur la toile j'ai trouvé ma réponse.
En modifiant le code trouvé, j'ai réussi à faire quelque chose de super.

Même si personne a pu m'aider, je post ici le bout de code utile qui scan le contenu du dossier et affiche le nombre d'extensions présentent dans ce dernier.

function browse($dir, $pExtension)
{
    if($handle = opendir($dir))
    {
         while(false !== ($file = readdir($handle)))
        {
            $getExt = explode(".", $file);
            $countExt = count($getExt);
            $fExt = $countExt - 1;
            $myExt = $getExt[$fExt];
            
            if (($myExt == $pExtension) && ($file != ".") && ($file != ".."))
                {$files[] = $file;}
        }
    }
return $files;    
closedir($handle);
}

// Séparez les extensions par un espace.
$gExtension = "exe mp3 php zip doc txt BAT SYS log xls ppt pdf bmp gif jpg png php3 htm html css js";

$ExpExt = explode(" ", $gExtension);
sort($ExpExt);

foreach($ExpExt as $findExt)
{
	$getFile = @browse($dir, $findExt); /* N'oubliez pas de spécifier le chemin $dir (= ".") */
	$countFile = count($getFile);

	if($countFile != 0)                
	{ 
		echo "<b>Fichier(s) ".strtoupper($findExt)."</b> (".$countFile.")<br />";
		
		foreach($getFile as $myFile)
		{
			echo "- ".$myFile."<br />";
		}
		
		echo "<br>";
	}
}


Exemple d'output :
Fichier(s) PHP (2) :
- index.php
- page1.php

Fichier(s) MP3 (1) :
- lolo.mp3


Merci quand même !
5
thepchou Messages postés 71 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 20 mai 2008 25
14 juin 2007 à 10:58
Entre temps, j'ai essayé de faire une fonction qui ressemble à
function assocExt($ext)
.
Le voici :

function sameExt($ext)
{
	$e = array(
		'BAT',
		'SYS',
		'doc',
		'log',
		'xls',
		'ppt',
		'pdf',
		'zip',
		'txt',
		'bmp',
		'gif',
		'jpg',
		'png',
		'php',
		'php3',
		'htm',
		'html',
		'css',
		'js'
		);
	if( in_array($ext, $e) )
	{
		return $e[$ext];
	}
}


Pour moi il y'a un hic, comment faire pour mettre ça dans la boucle qui liste les fichiers pour afficher le nombre d'extension identique ?
Le code entier m'a été fourni, je suis stagiaire et le php est un langage que je n'ai jamais utilisé auparavant...

Please help ! (=^_^=)
3
thepchou Messages postés 71 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 20 mai 2008 25
14 juin 2007 à 11:07
J'ai testé, et ça ne fait que retourner les extensions (d'ailleurs y'a des erreurs...).
Help ?
0
SRN Messages postés 95 Date d'inscription mardi 13 décembre 2005 Statut Membre Dernière intervention 10 mars 2008 22
28 nov. 2007 à 12:15
Salut,

il vraiment super cool ton code, j'ai quand même un question, pour moi, ce que je suis en train de faire, il faut que à chaque fichier xml trouvé, il afficher "salut <br>"

et ça je suis sûr que je peux utiliser ton code mais je ne sais pas comment le transformer pour que je puisse faire ça et comment le transformer aussi pour qu'il puisse faire pas que dasn un seul dossier mais aussi dans les dossier en dessus de celui qui est définit dans $dir ??


si tu m'apporter un peux d'aide sur cela ça serait bien volontiers

@++ SRN
0