Tri de fichier en fonction du type (dossier/fichier)

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 : Tri de fichier en fonction du type (dossier/fichier)

par bunk » 15 nov. 2005, 21:24

Bonsoir,

Encor une fois merci Truc, ca fonctionne bien comme ca :
		$array_dir = array();
        $array_files = array();
		$open = opendir($dir);
		while($read = readdir($open))
        {
            $file = $dir . '/' .$read;
            $file = is_dir($file) ? array_push($array_dir,$read) : array_push($array_files,$read);
		
		}
		
		sort($array_dir);
        sort($array_files);

// Debut de l'affichage du tableau
echo '<table width="100%" border="0" cellspacing="1">';

		for ($i=0;$i<count($array_dir);$i++)
	{
			if ($array_dir[$i] != "." && $array_dir[$i] != "..") {

	echo '<tr><td>';
	echo '<img src="./images/design/icones/dossier.gif" border="0" width="16" height="16" />&nbsp;' ;
	echo '</td><td>';
	echo '<a href="accueil.php?page=document_societe&dir=' . $dir . $array_dir[$i] . '/">' . $array_dir[$i] .'</a><BR />';
	echo '</td>';
	
		}
		}
		
	echo '</tr>';

	for ($i2=0;$i2<count($array_files);$i2++)
	{
	echo '<tr><td>';
		echo ICOext($array_files[$i2]);
		echo '</td><td>';
		echo '<a href="' . $dir . $array_files[$i2] . '">' . $array_files[$i2] . '</a>';
		echo '<td>';

// Conversion de Octet en Ko et Mo
					$octet = filesize($dir . $array_files[$i2]);
					$ko = $octet/1024;
					$mo = $ko/1024;
					$ako = sprintf ("%0.2f","$ko");
					$amo = sprintf ("%0.2f","$mo");

	if ($ako == "0.00") {
	echo "";
	} elseif ($ako < 1024) {
	echo  '<td>&nbsp;' . $ako . ' Ko</td>';
	} elseif ($ako > 1024) {
	echo  '<td>&nbsp;' . $amo . ' Mo</td>';
	} else {
	}

// Dernier update
					$der_upd = filemtime($dir .$array_files[$i2]);
					
					$anneel = substr($der_upd, 0, 4);
					$moisl = substr($der_upd, 5, 2);
					$jourl = substr($der_upd, 8, 2);
					$heurel = substr($der_upd, 11, 2);
					$minutel = substr($der_upd, 14, 2);
					$secondel = substr($der_upd, 17, 2);
					
					$der_up = date("Y-m-d G:i",$der_upd);
					
echo  '<td>' . dateFR($der_up) . '<BR /></td>';
	
	}

closedir ($open);
 echo '</tr></table>';

par Truc » 13 nov. 2005, 18:06

bon voila, normal qu'il n'y ai pas grand chose qui s'affiche .. en effectuant les calcul de taille etc.. dans le while tu écrase toujours les données et tu ne gardes que le dernier fichier.

IL faut donc que tu construit les tableaux de dossiers et fichiers grace au while et ensuite en dehors du while() les boucles for().

Dans la 2eme boucle (celle de fichiers) tu effectu les calculs:
for ($i2=0;$i2<count($array_files);$i2++)
{
   $octet = filesize($dir . $array_files[$i2]);
   .. 
   $der_upd = filemtime($dir .$array_files[$i2]);
   ....
}
pour prendre en compte chaque fichier

par bunk » 13 nov. 2005, 17:09

bon ben j'ai pas pu attendre, donc j'ai testé ce que tu m'avais dit Truc, mais les 2 for ne semble plus s'executer en fait, il n'affiche plus rien du tout, par contre le reste s'affiche

voia le code :
<?php
		$array_dir = array();
        $array_files = array();
		$open = opendir($dir);
        
		
		
		
		
		$var=0;		
		while($read = readdir($open))
        {
            $file = $dir . '/' .$read;
            $file = is_dir($file) ? array_push($array_dir,$read) : array_push($array_files,$read);
			
			// Conversion de Octet en Ko et Mo
					$octet = filesize($dir . $read);
					$ko = $octet/1024;
					$mo = $ko/1024;
					$ako = sprintf ("%0.2f","$ko");
					$amo = sprintf ("%0.2f","$mo");
					
			// Dernier update
					$der_upd = filemtime($dir . $read);
					
					$anneel = substr($der_upd, 0, 4);
					$moisl = substr($der_upd, 5, 2);
					$jourl = substr($der_upd, 8, 2);
					$heurel = substr($der_upd, 11, 2);
					$minutel = substr($der_upd, 14, 2);
					$secondel = substr($der_upd, 17, 2);
					
					$der_up = date("Y-m-d G:i",$der_upd);
					
		//}
		
		sort($array_dir);
        sort($array_files);
		
		
		//print_r ($array_dir);
		//print_r ($array_files);
		
?>
<tr>
  <!-- ZONE A REPETER !-->
  <td><?php
  if ($read != "." && $read != "..") {
  echo ICOext($read); 
  }
  
  ?></td>
  
    <td>
	<?php
		if($var==0)
    {
		for ($i=0;$i<count($array_dir);$i++)
	{
			if ($array_dir[$i] != "." && $array_dir[$i] != "..") {
	
	echo '<a href="accueil.php?page=document_societe&dir=' . $dir . $array_dir[$i] . '/">' . $array_dir[$i] .'</a><br>';
		}
		}

	for ($i2=0;$i2<count($array_files);$i2++)
	{
	echo '<a href="' . $dir . $array_files[$i2] . '">' . $array_files[$i2] . '</a><br>' ;
	}
	    }
	?>
	</td>
    <td>
	<?php
	if ($read != "." && $read != "..") {
	echo dateFR($der_up) ;
	}
	?>
	</td>
    <td>
	<?php 
	if ($ako == "0.00") {
	echo "";
	} elseif ($ako < 1024) {
	echo $ako . " Ko";
	} elseif ($ako > 1024) {
	echo $amo . " Mo";
	} else {
	}
	?>
	</td>
<?php
$var=1;
}
closedir ($open);
?>
J'ai pas tout collé mais le principal est la

Merci de votre aide

par bunk » 13 nov. 2005, 16:16

Effectivement Fab dans le code que j'ai collé l'acollade qui ferme le while est mise en commentaire

Je vais essayé ca ce soir Truc je repasserais pour dire si je m'en suis sorti

Merci a vous

par fab » 13 nov. 2005, 15:02

soit je deviens taré soit je vois pas de for dans le while

par Truc » 13 nov. 2005, 15:00

Salut, j'ai pas tout suivis mais tout ce que tu veut c'est d'exécuter qu'une seule fois la boucle for() comrise dans la boucle while() ?!

tu n'a qu'a initialiiser une variable a 0 avant le while qui dans cette meme boucle prend 1 et le for sera inclus dans un test et ne sera exécuté que si cette variable est a 0:
$var=0;
while(......)
{
    if($var==0)
    {
       for(...)
       {
          ....
       }
    }
    $var=1;
}

par bunk » 13 nov. 2005, 13:03

Bonjour,

Est-ce qu'un break pourrait faire en sorte que les for ne s'executent qu'une seulle fois ?

D'avance merci

par bunk » 12 nov. 2005, 17:56

en fait mon probleme c'est que en l'etat, le for se repete autant de fois qu'il y'a de fichier/dossier

Est il possible de lui dire de ne pas se repeter dans le while ?

D'avance merci

par bunk » 12 nov. 2005, 17:01

en fait je raconte n'importe quoi, si je mettais les informations la ou il faut ca serait surement mieux

voila le code :
<?php
// Insertion du fichier admin/conf/conf.php
include ("conf/conf.php");
require ("conf/fonction.php");

// Récuperation de dir dans URL
$var_url = $_GET['dir'];

// Condition pour $dir
if ($var_url != "") {
$dir = $var_url;
} else {
$dir = "./data/societe/";
}

		$array_dir = array();
        $array_files = array();
        $open = opendir($dir);
        while($read = readdir($open))
        {
            $file = $dir . '/' .$read;
            $file = is_dir($file) ? array_push($array_dir,$read) : array_push($array_files,$read);
			
			// Découpe le nom de fichier en fonction du . si present
			$fichier = explode(".", $read);
			
			// Conversion de Octet en Ko et Mo
					$octet = filesize($dir . $read);
					$ko = $octet/1024;
					$mo = $ko/1024;
					$ako = sprintf ("%0.2f","$ko");
					$amo = sprintf ("%0.2f","$mo");
					
			// Dernier update
					$der_upd = filemtime($dir . $read);
					
					$anneel=substr($der_upd, 0, 4);
					$moisl=substr($der_upd, 5, 2);
					$jourl=substr($der_upd, 8, 2);
					$heurel=substr($der_upd, 11, 2);
					$minutel=substr($der_upd, 14, 2);
					$secondel=substr($der_upd, 17, 2);
					
					$der_up = date("Y-m-d G:i",$der_upd);
					
		}
		
		sort($array_dir);
        sort($array_files);
		
		//print_r ($array_dir);
		//print_r ($array_files);
		
?>
<br>
<table width="60%" border="0" align="center">
<tr>
<td>
<fieldset>
<legend>Documents officiels de la société</legend>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="38%"><div align="center">Nom</div></td>
    <td width="42%"><div align="center">Derni&egrave;re update </div></td>
    <td width="20%"><div align="center">Taille</div></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td><?php
	if ($var_url != "") { // Retour au precedent
	echo '<img src="./images/design/retour.gif" border="0" />&nbsp;<a href="javascript:history.go(-1)">Retour</a>';
	echo "<br>";
	} else {
	}
	?></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>

<?php

?>
  <!-- ZONE A REPETER !-->
    <td>
	<?php
	for ($i=0;$i<count($array_dir);$i++)
	{
	if ($array_dir[$i] != "." && $array_dir[$i] != "..") {
	
	echo '<img src="./images/design/dossier.gif" border="0" />&nbsp;<a href="?dir=' . $dir . $array_dir[$i] . '/">' . $array_dir[$i] .'</a><br>';
		
		}
		}
		
	for ($i=0;$i<count($array_files);$i++)
	{
	echo '<img src="./images/design/fichier.gif" border="0" />&nbsp;<a href="' . $dir . $array_files[$i] . '">' . $array_files[$i] . '</a><br>' ;
	}
	?>
	</td>
	
	
    <td><?php 
									if ($ako == "0.00") {
										echo "";
									} elseif ($ako < 1024) {
										echo $ako . " Ko";
									} elseif ($ako > 1024) {
										echo $amo . " Mo";
									} else {
									}
?></td>
	
	
	
    <td>&nbsp;</td>


<?php
//}
closedir ($open);
?>
  </tr>
<tr>
    <td colspan="3">
	<hr>
	<form>
	<form name="form" method="post" action="" enctype="multipart/form-data">
	<input name="fichier" type="file" size="28" />
	<input type="submit" name="Submit" value="Envoyer">
	</form>
	</td>
	</tr>
</table>
</fieldset><br></td></tr></table>
Donc le fietime() et filesize() fonctionne par contre je galere pour faire ma boucle d'affichage.

Je vois pas comment mettre bien en forme mon table avec c'est 2 for

merci

par bunk » 12 nov. 2005, 16:43

merci, ca fonctionne mais j'ai toujours autant de mal avec les boucle for ducoup mon filesize() et filetime() ne fonctinne plus

voila le code :
<?php
// Insertion du fichier admin/conf/conf.php
include ("conf/conf.php");
require ("conf/fonction.php");

// Récuperation de dir dans URL
$var_url = $_GET['dir'];

// Condition pour $dir
if ($var_url != "") {
$dir = $var_url;
} else {
$dir = "./data/societe/";
}

		$array_dir = array();
        $array_files = array();
        $open = opendir($dir);
        while($read = readdir($open))
        {
            $file = $dir . '/' .$read;
            $file = is_dir($file) ? array_push($array_dir,$read) : array_push($array_files,$read);
		
		}
		sort($array_dir);
        sort($array_files);
		
		//print_r ($array_dir);
		//print_r ($array_files);
		
		   			
					
					// Découpe le nom de fichier en fonction du . si present
					$fichier = explode(".", $file);
					
					// Conversion de Octet en Ko et Mo
					$octet = filesize($dir . $file);
					$ko = $octet/1024;
					$mo = $ko/1024;
					$ako = sprintf ("%0.2f","$ko");
					$amo = sprintf ("%0.2f","$mo"); 
					
					$der_upd = filemtime($dir . $file);
					
					// Dernier update
					$anneel=substr($der_upd, 0, 4);
					$moisl=substr($der_upd, 5, 2);
					$jourl=substr($der_upd, 8, 2);
					$heurel=substr($der_upd, 11, 2);
					$minutel=substr($der_upd, 14, 2);
					$secondel=substr($der_upd, 17, 2);
					
					$der_up = date("Y-m-d G:i",$der_upd);
		 
?>
<br>
<table width="60%" border="0" align="center">
<tr>
<td>
<fieldset>
<legend>Documents officiels de la société</legend>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="38%"><div align="center">Nom</div></td>
    <td width="42%"><div align="center">Derni&egrave;re update </div></td>
    <td width="20%"><div align="center">Taille</div></td>
  </tr>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td><?php
	if ($var_url != "") { // Retour au precedent
	echo '<img src="./images/design/retour.gif" border="0" />&nbsp;<a href="javascript:history.go(-1)">Retour</a>';
	echo "<br>";
	} else {
	}
	?></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>

<?php

?>
  <!-- ZONE A REPETER !-->
    <td>
	<?php
	for ($i=0;$i<count($array_dir);$i++)
	{
	
	if ($array_dir[$i] != "." && $array_dir[$i] != "..") {
	echo '<img src="./images/design/dossier.gif" border="0" />&nbsp;<a href="?dir=' . $dir . $array_dir[$i] . '/">' . $array_dir[$i] .'</a><br>';
		
		}
		}
		
	for ($i=0;$i<count($array_files);$i++)
	{
	echo '<img src="./images/design/fichier.gif" border="0" />&nbsp;<a href="' . $dir . $array_files[$i] . '">' . $array_files[$i] . '</a><br>' ;
	}
	?>
	</td>
	
	
    <td><?php 
									if ($ako == "0.00") {
										echo "";
									} elseif ($ako < 1024) {
										echo $ako . " Ko";
									} elseif ($ako > 1024) {
										echo $amo . " Mo";
									} else {
									}
?></td>
	
	
	
    <td>&nbsp;</td>


<?php
//}
closedir ($open);
?>
  </tr>
<tr>
    <td colspan="3">
	<hr>
	<form>
	<form name="form" method="post" action="" enctype="multipart/form-data">
	<input name="fichier" type="file" size="28" />
	<input type="submit" name="Submit" value="Envoyer">
	</form>
	</td>
	</tr>
</table>
</fieldset><br></td></tr></table>
alors je sais pas si je peux rajouter c'est 2 fonctions dans le for ou si il faut refaire une boucle, je trouve le for tres sympatique mais c'est un peu la galère pour l'integrer dans un tableau

merci

par fab » 12 nov. 2005, 14:24

$array_dir = array();
		$array_files = array();
		$open = opendir($dir);
		while($read = readdir($open))
		{
			$file = $dir . '/' .$read;
			$file = is_dir($file) ? array_push($array_dir,$read) : array_push($array_files,$read);
		}
		sort($array_dir);
		sort($array_files);
et apres tu fais un for sur array_dir et array_files dans l'ordre que tu veux :)

Tri de fichier en fonction du type (dossier/fichier)

par bunk » 12 nov. 2005, 13:41

Bonjour,

J'ai utilisé differents petit bout de script que j'ai trouvé en parcourant le forum pour faire un petit explorateur de dossier tout simple pour qu'il affiche une image en fonction du type (dossier/fichier), le nom du fichier, la date de dernière modification, et son poid (en Oc, Ko ou Mo)

Pour cela j'utilise une boucle While, pour faire le tri en fait je voudrais combiner 2 tri, le premier en fonction du type et le second par ordre alphabetique : ex:

Dossier_1
Dossier_2
Dossier_3
Fichier_1
Fichier_2

Je pense qu'il faut faire un tableau mais je pense que ce n'est pas compatible avec ce que j'ai deja fait, pouvez vous m'aider ?

voila lecode :
<?php
session_name('gesten'); 
session_start();

// Condition sinon redirection
	if(!session_is_registered('id')){
	
		header("Location: ./index.php?erreur=4");
		exit;
	}

// Insertion du fichier admin/conf/conf.php
include ("conf/conf.php");
require ("conf/fonction.php");

// Récuperation de dir dans URL
$var_url = $_GET['dir'];

// Condition pour dir
if ($var_url != "") {
$dir = $var_url;
} else {
$dir = "./data/societe/";
}
?>
<br>
<table width="60%" border="0" align="center" width="80%">
<tr>
<td>
<fieldset>
<legend>Documents officiels de la société</legend>

<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="21%"><div align="center"></div></td>
	<td width="11%"><div align="center">Nom</div></td>
    <td width="53%"><div align="center">Derni&egrave;re modification </div></td>
    <td width="15%"><div align="center">Taille</div></td>
  </tr>
  <tr>
    <td colspan="4"><hr></td>
  </tr>
  <tr>
    <td><div align="center"><?php
	
	if ($var_url != "") {
	echo '<a href="javascript:history.go(-1)"><img src="./images/design/retour.gif" border="0" /> Retour</a>';
	echo "<br>";
	} else {
	}
?>
	</div></td>
    <td>&nbsp;</td>
	<td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>

<?php
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
	   
		   if ($file != "." && $file != "..") {
		   			
					// Découpe le nom de fichier en fonction du . si present
					$fichier = explode(".", $file);
					
					// Determine le type (dir ou file)
					//$type = filetype($dir . $file);
					// OU
					//echo is_dir ($dir); // Donne 1 si fichier
										
					// Conversion de Octet en Ko et Mo
					$octet = filesize($dir . $file);
					$ko = $octet/1024;
					$mo = $ko/1024;
					$ako = sprintf ("%0.2f","$ko");
					$amo = sprintf ("%0.2f","$mo"); 
					
					$der_upd = filemtime($dir . $file);
					
					// Dernier update
					$anneel=substr($der_upd, 0, 4);
					$moisl=substr($der_upd, 5, 2);
					$jourl=substr($der_upd, 8, 2);
					$heurel=substr($der_upd, 11, 2);
					$minutel=substr($der_upd, 14, 2);
					$secondel=substr($der_upd, 17, 2);
					
					$der_up = date("Y-m-d G:i",$der_upd);
?>
  <tr>
    <td><div align="center"><?php
	// Affichage de l'icone
			if (filetype($dir . $file) == "dir") {
				echo '<img src="./images/design/dossier.gif" />';
			} else {
				echo '<img src="./images/design/fichier.gif" />';
			}
	?></div></td>
	<td><?php

			// Affichage des dossier / fichier
			if (filetype($dir . $file) == "file") {
				//header("Content-type: application/force-download");
				echo '<a href="' . $dir . $file . '">' . $file ;
			} elseif (filetype($dir . $file) == "dir") {
				echo '<a href="accueil.php?page=document_societe&dir=' . $dir . $file . '/">' . $file ;
			} else {
			}
?>
	</td>
	
    <td><div align="center"><?php echo "Le " . dateFR($der_up) ; ?></div></td>
    <td><div align="center"><?php 
									if ($ako == "0.00") {
										echo "";
									} elseif ($ako < 1024) {
										echo $ako . " Ko";
									} elseif ($ako > 1024) {
										echo $amo . " Mo";
									} else {
									}
?>
	</div></td>
  </tr>
<?php
// Fermeture des condition et fermeture du dossier
}
	   	}
       closedir($dh);
   }
}
?>
</table></fieldset><br></td></tr></table>
D'avance merci