Forum Clubic

Récupération de la date d'un fichier en PHP ?

Bonjour,

Je viens de faire un code qui me permet de récupérer dans un tableau tous les fichiers d’un répertoire.
J’aimerai avoir dans ce tableau une seconde colonne qui me donne la date de création (ou de modification) du fichier. Voilà ce que j’ai fait :


<?php
function listing($repertoire){
	$fichier = array();
	if (is_dir($repertoire)){
		$dir = opendir($repertoire);                              //ouvre le repertoire courant désigné par la variable
		while(false!==($file = readdir($dir))){                             //on lit tout et on récupere tout les fichiers dans $file
			if(!in_array($file, array('.','..'))){            //on eleve le parent et le courant '. et ..'
				$page = $file;                            //sort l'extension du fichier
				$page = explode('.', $page);
				$nb = count($page);
				$nom_fichier = $page[0];
				for ($i = 1; $i < $nb-1; $i++){
					$nom_fichier .= '.'.$page[$i];
				}
				if($ext_fichier != 'php' and $ext_fichier != 'html') {        //utile pour exclure certains types de fichiers à ne pas lister
					array_push($fichier, $file);
				}
			}
		}
	}
	natcasesort($fichier);                                    //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
	foreach($fichier as $value) {
			echo '<tr>
          <td><p align="center"><a href="'.rawurlencode($repertoire).'/'.rawurlencode(str_replace ('/', '', $value)).'">'.$value.'</a></p></td>
        <td><p align="center">'.date ("d/m/Y", filemtime($file)).'</p></td>
        </tr>';
	}
}
//exemple d'utilisation :
listing('winter');        //chemin du dossier
?>

Mais ça ne me donne pas la bonne date (01/01/1970 pour tous les fichiers).
Je pense que ça déconne au niveau de mon filemtime($file), $file ne devant pas être la bonne variable, mais je ne sais pas quoi mettre…
Merci de votre aide.

PS : Est-il possible de récupérer le nom de fichier de cette page PHP, à savoir que cette je voudrais, dans la page page3.php pouvoir récupérer le nom page3 en variable ?

c’est parce que t’as uen erreur dans ton code :
date (“d/m/Y”, filemtime($file)) << ca devrait etre date (“d/m/Y”, filemtime($value))

pour le nom du fichier t’as

$_SERVER[‘SCRIPT_FILENAME’]
ou $_SERVER['SCRIPT_NAME"]

Malheureusement, ce n’est pas ça. Si je mets $value, j’ai ces erreurs :


Warning: filemtime() [function.filemtime]: Stat failed for Copie (2) de Factures WINTER.xls (errno=2 - No such file or directory) in /home.3/zerobug/www/gestion/winter.php3 on line 73

Idem en ce qui concerne le nom de page, si je mets listing($_SERVER[‘SCRIPT_NAME’]); ou listing($_SERVER[‘SCRIPT_FILENAME’]); le script ne fonctionne plus.
Edité le 29/09/2007 à 00:28

tu pourrais essayer

date ("d/m/Y", filemtime($repertoire."/".$value))

alors ?

$_SERVER[‘SCRIPT_NAME’] est de la forme /fichier.php
$_SERVER[‘SCRIPT_FILENAME’] est de la forme /var/zzz/fichier.php

faut donc adapter :smiley:

Ah ben non, ça ne me donne pas les bonnes dates. Ca me donne les dates d’aujourd’hui…mais ça marche sur d’autres dossiers, pour des fichiers images par exemple.
Par contre, pour adapter le reste…ch’ui toujours une brêle !
En fait, il me faudrait :
$_SERVER[‘SCRIPT_NAME’] est de la forme /fichier.php mais en supprimant / et .php !
Edité le 29/09/2007 à 00:38

les dates de modification c’est parfois les dates d’ouverture des fichiers, a toi de voir ce que tu souhaites :slight_smile:

$nomscript=substr($_SERVER[‘SCRIPT_NAME’],1,-4);
Edité le 29/09/2007 à 00:44


genre word en faisant des sauvegardes périodiques modifie le fichier

voila voila

Bon apparemment, pas de solution. Il me met toujours la date à laquelle j’ai envoyé le fichier sur le serveur.
Idem pour le nom de fichier. Je pense que ce script ne supporte pas cette fonction.

Merci quand même !:super:

quand tu as envoyé le fichier sur le serveur; c’est leur date de modification :wink:

Ok. Mais toujours pas de solution pour le nom du fichier…

$nomscript=substr($_SERVER[‘SCRIPT_NAME’],1,-4); ne fonctionne pas ??

Non, ça ne fonctionne pas.
J’ai donc mis la fonction $nomscript=substr($_SERVER[‘SCRIPT_NAME’],1,-4); .
Quand j’appelle le listing, au lieu d’avoir listing(‘winter’); (winter étant le dossier à analyser), je mets listing(’.$nomscript’);

:non:

$nomscript = basename($_SERVER[‘SCRIPT_NAME’]);
C’est plus “propre” :slight_smile:

Je n’ai rien compris à cette phrase.
Edité le 29/09/2007 à 19:20

Au lieu d’avoir à modifier le nom du dossier (winter), je demandais s’il fallait dans ce cas que je mette cette fonction.

Bah heu… $nomscript contenant un nom de fichier, je ne vois pas l’intérêt d’appeler listing() dessus vu que c’est une fonction qui ne fait rien du tout si is_dir($nomscript) == false :neutre:

Pour rappel, le code ressemble à ça maintenant :


<?php
//Guillaume ROBERT pour le site Zerobug
//http://www.zerobug.fr
//Script permettant de lister tous les fichiers PDF d'un répertoire
//dans un tableau et créant automatiquement des liens de 
//téléchargement. Le fichier PDF ne s'ouvre donc pas par défaut 
//dans le navigateur mais l'utilisateur aura le choix entre l'ouvrir
//et le télécharger sur son disque dur

function listing($dir)
{
 $pdf_files = array();
 $path_parts = pathinfo(__FILE__);
 $dh = opendir($dir);

 while (false !== ($filename = readdir($dh)))
 {
 if(strtolower(strrchr($filename, '.')) == '.pdf')
 $pdf_files[] = $filename;
 }
 
 rsort($pdf_files);

 foreach($pdf_files as $pdf_file)
 {

	
	/* à partir de là, on créé le lien forçant le
	//téléchargement du fichier PDF
	//Pour cela, il vous faudra créer dans chaque répertoire à lister
	//un fichier php (ici nommé down.php) composé comme ceci :
	//<? 
    //header("Content-type: application/pdf"); 
    //header("Content-Disposition: attachment; filename=$pdf"); 
    //readfile($pdf); 
    //?> */
			echo ;
			echo '<tr>
          <td><p align="center"><a href="'.rawurlencode($dir).'/down.php?pdf='.rawurlencode(str_replace ('/', '', $pdf_file)).'">'.$pdf_file.'</a></p></td>
        <td><p align="center">'.date ("d/m/Y", filectime($dir."/".$pdf_file)).'</p></td>
        </tr>';
	}
}


//exemple d'utilisation :
listing('winter');        //chemin du dossier
?>

Ah je ne savais pas que cette fonction existait en php, mais dans ce cas, il faudrait faire

 $nomscript = basename($_SERVER['SCRIPT_NAME'],".php");

pour correspondre à ce qu’il souhaite :wink:

Et le gagnant est… benj !!!
Nickel, ça marche.
En fait, il a fallu que je mette :

Code : $nomscript = basename($_SERVER['SCRIPT_NAME'],".php3");

Merci beaucoup.


A partir du code existant, vous savez s'il serait possible de faire ressortir les variables du nombre de fichiers PDF et de leur poids total ?

ben, dans le foreach tu ajoutes

$poids+=filesize($dir."/".$pdf_file);

en ayant pris soin d’initialiser $poids à 0 en haut.
pour le nombre de fichiers tu fais count($pdf_files) apres le readdir :oui:

J’ai donc fait ceci :
$poids = 0;

Plus bas :


 foreach($pdf_files as $pdf_file)
$poids+=filesize($dir."/".$pdf_file);

Dans ce cas, il ne me trouve à lister plus que le premier PDF.
Je n’ai pas réussi à intégrer le count($pdf_files)…

Tout fonctionne donc bien maintenant, mis à part les deux fonctions deux benj que je n’arrive pas à intégrer.