8791 sujets

Développement web côté serveur, CMS

Bonjour,

je souhaite obtenir un page web contenant l'historique de modification des fichiers HTML et PHP sur un serveur (PHP4 ou PHP5, pas de base SQL).

nom du fichier (avec lien), date de modification du fichier sur le serveur.

Je voudrais savoir s'il existe des scripts pour générer dynamiquement une arborescence de site web.
Celà éviterait de devoir réinventer la roue

Merci
Modifié par kornfr (12 Sep 2009 - 15:13)
Bonsoir,

Merci
Concernant la présentation c'est très bon Smiley lol
j'arrive également a afficher la date de modification

Mais je n'ai pas compris comment récupérer les données pour appliquer un tri par date.

en effet je souhaite afficher l'ensemble des fichiers par date de modification (sa position dans un répertoire n'est pas nécessaire.)

merci



<?php

class listFiles {

	private $extension		= '';		// extension des fichiers à lister

	private $current_path	= '';		// chemin du répertoire en cours

	private $dirs_in_dir	= array();	// tableau des répertoires d'un répertoire

	private $files_in_dir	= array();	// tableau des fichiers d'un répertoire

	public function listFiles($Path = '.', $extension = 'html') {

		$this->extension = $extension;

		$this->listDirs($Path);

	}

	private function listDirs($Current_Path) {

		$this->current_path = $Current_Path;

		$this->dirs_in_dir = array();

		$this->files_in_dir = array();

		if ($handle = opendir($Current_Path)) {

			while (false !== ($file = readdir($handle))) {

				if ($file != "." && $file != "..") {

					$path = $Current_Path.'/'.$file;

					if (is_dir($path)) {

						$this->dirs_in_dir[]=$path;

					} else {

						$this->files_in_dir[]=$file;

					}

				}

			}

		}

		closedir($handle);

		$this->display();

	}

	private function display() {

		$nb_files = count($this->files_in_dir) > 0;

		$nb_dirs  = count($this->dirs_in_dir) > 0;

		if($nb_files || $nb_dirs) {

			echo '<ul>'."\n";

			// Si des fichiers existent...

			if($nb_files) {

				$this->displayFiles();

			}

			// Si des dossiers existent...

			if($nb_dirs) {

				$this->displayDirs();

			}

			echo '</ul>'."\n";

		}

	}

	private function displayFiles() {

		foreach ($this->files_in_dir as $file) {

			$pathinfo = pathinfo($file);

			if ($pathinfo['extension'] == $this->extension) {

				$href = $this->current_path.'/'.$file;

				echo '<li><a href="'.$href.'">'.$file.'</a></li>'."\n";
				echo 'date de modif '.filemtime($href)."\n";
				

			} else {

			$href = $this->current_path.'/'.$file;

				echo '<li><a href="'.$href.'">'.$file.'</a></li>'."\n";
				echo 'date de modif '.filemtime($href)."\n";

			}

		}

	}

	private function displayDirs() {

		// Tri inverse

		rsort($this->dirs_in_dir);

		foreach ($this->dirs_in_dir as $dir) {

			echo '<li><h2 class="title">'.substr(strrchr($dir, "/"), 1).'</h2>';

			$this->listDirs($dir);

			echo '</li>'."\n";

		}

	}

}

$listFiles = new listFiles(); 


print_r( $listFiles );

?>

Modifié par kornfr (12 Sep 2009 - 20:47)
Quelque chose comme ça ?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test tri par date modif</title>
</head>
<body>
<?php
class listFiles {
	private $extension	= '';		// extension des fichiers à lister
	private $current_path	= '';		// chemin du répertoire en cours
	private $dirs_in_dir	= array();	// tableau des répertoires d'un répertoire
	private $files_in_dir	= array();	// tableau des fichiers d'un répertoire
	public function listFiles($Path = '.', $extension = 'html') {
		$this->extension = $extension;
		$this->listDirs($Path);
	}
	private function listDirs($Current_Path) {
		$this->current_path = $Current_Path;
		$this->dirs_in_dir = array();
		$this->files_in_dir = array();
		if ($handle = opendir($Current_Path)) {
			while (false !== ($file = readdir($handle))) {
				if ($file != "." && $file != "..") {
					$path = $Current_Path.'/'.$file;
					if (is_dir($path)) {
						$this->dirs_in_dir[]=$path;
					} else {
						$this->files_in_dir[]= array( filemtime($path), $file );
					}
				}
			}
		}
		closedir($handle);
		$this->display();
	}
	private function display() {
		$nb_files = count($this->files_in_dir) > 0;
		$nb_dirs  = count($this->dirs_in_dir) > 0;
		if($nb_files || $nb_dirs) {
			echo '<ul>'."\n";
			// Si des fichiers existent...
			if($nb_files) {
				$this->displayFiles();
			}
			// Si des dossiers existent...
			if($nb_dirs) {
				$this->displayDirs();
			}
			echo '</ul>'."\n";
		}
	}
	private function displayFiles() {
		rsort($this->files_in_dir);  
		foreach ($this->files_in_dir as $array_file) {
			$date_modif = date("d/m/Y à H:i:s", $array_file[0]);
			$file = $array_file[1];
			$pathinfo = pathinfo($file);
			$href = $this->current_path.'/'.$file;
			if ($pathinfo['extension'] == $this->extension) {
				echo '<li><a href="'.$href.'">'.$file.' modifié le '.$date_modif.'</a></li>'."\n";
			} else {
				echo '<li>'.$file.' modifié le '.$date_modif.'</li>'."\n";
			}
		}
	}
	private function displayDirs() {
		// Tri inverse
		rsort($this->dirs_in_dir);
		foreach ($this->dirs_in_dir as $dir) {
			echo '<li><h2 class="title">'.substr(strrchr($dir, "/"), 1).'</h2>';
			$this->listDirs($dir);
			echo '</li>'."\n";
		}
	}
}

setlocale(LC_TIME, 'french', 'fr_FR');
$listFiles = new listFiles(); 
//$listFiles = new listFiles('repert');
//$listFiles = new listFiles('repert1/repert2');
//$listFiles = new listFiles('repert1/repert2', 'ext');
?>
</body>
</html>
Bonsoir,

En actuellement, vous avez réussi à classer les fichiers de chaque répertoire par date de création Smiley smile
ce que je souhaite c'est avoir c'est l'ensemble des fichiers classés par date de modification. (quelque soit leur répertoire d'origine)

Pouvez vous me dire dans quelle variable (un tableau?) sont stockés le nom et la date de chaque fichier ?

Merci (beaucoup pour votre aide prescience rapide)
kornfr a écrit :
Pouvez vous me dire dans quelle variable (un tableau?) sont stockés le nom et la date de chaque fichier ?
Euh...
private $files_in_dir    = array();    // tableau des fichiers d'un répertoire
Smiley rolleyes

Sinon c'est simple : il suffit de tout scanner et de ne faire l'affichage qu'à la fin :
class listFiles { 
    private $files_in_dir    = array();    // tableau des fichiers d'un répertoire 
    public function listFiles($Path = '.') { 
        $this->listDirs($Path); 
        $this->display(); 

    } 
    private function listDirs($Current_Path) { 
        if ($handle = opendir($Current_Path)) { 
            while (false !== ($file = readdir($handle))) { 
                if ($file != "." && $file != "..") { 
                    $path = $Current_Path.'/'.$file; 
                    if (is_dir($path)) {
                        $this->listDirs($path); 
                    } else { 
                        $this->files_in_dir[]= array( filemtime($path), $file ); 
                    } 
                } 
            } 
        } 
        closedir($handle); 
    } 
    private function display() { 
        $nb_files = count($this->files_in_dir) > 0; 
        if($nb_files) { 
            echo '<ul>'."\n"; 
            // Si des fichiers existent... 
            if($nb_files) { 
                $this->displayFiles(); 
            }
            echo '</ul>'."\n"; 
        } 
    } 
    private function displayFiles() { 
        rsort($this->files_in_dir); // utiliser sort pour inverser le tri
        foreach ($this->files_in_dir as $array_file) { 
            $date_modif = date("d/m/Y à H:i:s", $array_file[0]); 
            $file = $array_file[1]; 
            $pathinfo = pathinfo($file); 
            echo '<li>'.$file.' modifié le '.$date_modif.'</li>'."\n"; 
        } 
    }
} 
 
setlocale(LC_TIME, 'french', 'fr_FR'); 
$listFiles = new listFiles();
//$listFiles = new listFiles('repertoire');

Modifié par Heyoan (13 Sep 2009 - 06:37)
Bonjour,
Heyoan, vous etes TERRIBLE ! MERCI Smiley smile

Mon problème est quasiment résolu grâce à vous !

il me reste néanmoins 1 problème :
Mon souci concerne le lien vers la page

en effet j'ai modifié votre script afin d'obtenir un flux RSS
Malheureusement les liens ne fonctionnent pas (et génére un erreur)

<?php 
class listFiles {  
    private $files_in_dir    = array();    // tableau des fichiers d'un répertoire  
    public function listFiles($Path = '.') {  
        $this->listDirs($Path);  
        $this->display();  
    }  
    private function listDirs($Current_Path) {  
        if ($handle = opendir($Current_Path)) {  
            while (false !== ($file = readdir($handle))) {  
                if ($file != "." && $file != "..") {  
                    $path = $Current_Path.'/'.$file;  
                    if (is_dir($path)) { 
                        $this->listDirs($path);  
                    } else {  
                        $this->files_in_dir[]= array( filemtime($path), $file, $path );  	
                    }  
                }  
            }  
        }  
        closedir($handle);  
    }  
    private function display() {  
        $nb_files = count($this->files_in_dir) > 0;  
        if($nb_files) {  
            // Si des fichiers existent...  
            if($nb_files) {  
                $this->displayFiles();  
            } 
        }  
    }  
    private function displayFiles() {  
        $compteur =1;
		rsort($this->files_in_dir); // utiliser sort pour inverser le tri 
        foreach ($this->files_in_dir as $array_file) {  
			$date_modif = date("D, d M Y H:i:s", $array_file[0]);  
            $file = $array_file[1];  
            $pathinfo = pathinfo($file);
		 if ($pathinfo['extension'] == "html" || $pathinfo['extension'] == "htm" || $pathinfo['extension'] == "php"){
			$compteur++;
          	if ($compteur<12) {
		 		$xml = ' <item>'."\n";  
         		$xml .= ' <title>'.$file.'</title>'."\n"; 
         		$xml .=  '<link>'.$array_file[2].'</link>'."\n";
         		$xml .=   '<guid isPermaLink="true">'.$array_file[2].'</guid>'."\n";
		 		$xml .=  '<description>Page mise a jour le '.$date_modif.'</description>'."\n";	 
		 		$xml .=  '<pubDate>'.$date_modif.' +0200</pubDate>'."\n";
         		$xml .=  '</item>'."\n";
		  		echo $xml;

		    // echo '<li><a href="'.$array_file[2].'">'.$file.'</a> </li>'."\n";  

			 	 } 
			} 
        }  
    } 
}  
    
// édition du début du fichier XML
$xml = '<?xml version="1.0" encoding="US-ASCII"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'."\n";
$xml .= '<channel>'."\n"; 
$xml .= '<title>test rss</title>'."\n"; //A MODIFIER
$xml .= '<link>http://www.test.com</link>'."\n";//A MODIFIER
$xml .= '<description>Historique des Modifications</description>'."\n";//A MODIFIER
$xml .= '<lastBuildDate>'.date("D, d M Y H:i:s").' +0200</lastBuildDate>'."\n";
 echo $xml;
setlocale(LC_TIME, 'french', 'fr_FR');  
// appel de la class
$listFiles = new listFiles();

$xml2 .= '</channel>'."\n";
$xml2 .= '</rss>'."\n";
echo $xml2;
?> 


Merci
Modifié par kornfr (26 Jun 2012 - 22:02)