Il renvoie : Notice: Undefined variable: IN2.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 48
Code:closedir ($dossier); $chemin='new'; echo($$nom_plus_recent); //ligne 48 $fichier = fopen($chemin.'/'.$nom_plus_recent,"r");
Oops, j'ai fait une erreur de frappe
Il renvoie : IN2.txt
(le nom de fichier le plus "petit" de ma liste)
C'est exact,
J'ai encore essayer avec cette liste
IN2
IN3
IN4
en supprimer IN2 et en créant un fichier IN5 (qui est plus récent) il me renvoie le fichier IN3
Apparemment, l'obtention de la date ne marche pas. Il faudrait mettre un echo dans la boucle pour voir ce qu'il renvoie en guise de timestamp :
Code:$timestamp_fichiers=time($fichier); echo $timestamp_fichiers.'<br>';
Il me renvoie :
1460981558
1460981558
1460981558
IN1.txt
Là il y a 3 fichier dans le dossier new et à chaque fois que j'ajoute un fichier, il y a une nouvelle ligne de nombre qui s'ajoute.
Remplace :
parCode:$timestamp_fichiers=time($fichier);
Code:$timestamp_fichiers=filemtime($fichier) ;
Voilà ce qu'il renvoi :
Warning: filemtime(): stat failed for IN1.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
Warning: filemtime(): stat failed for IN2.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
Warning: filemtime(): stat failed for IN3.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
IN1.txt
essaie :
Code:$timestamp_fichiers=filectime($fichier);
Même chose :
Warning: filectime(): stat failed for IN1.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
Warning: filectime(): stat failed for IN2.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
Warning: filectime(): stat failed for IN3.txt in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\Index avec recherche des fichiers.php on line 27
IN1.txt
Bon, le problème vient plutôt de l'accès aux fichiers.
Remet ici tout le code PHP qui précède la ligne avec filectime.
Code:$nom=1; $dossier = opendir ('new'); $i=0; $plus_grand_timestamp=0; $nom_plus_recent=0; $nb_lignes=0; $affichage=0; $affichege2=0; $affichage3; $affichage5=0; $affichage6=0; $affichage8=0; $affichage9=0; while (false !== ($fichier= readdir($dossier))) { if(strpos($fichier,'.txt')>1 or strpos($fichier,'.TXT')>1) { $liste_fichiers[$i]=$fichier; $timestamp_fichiers=filectime($fichier); echo $timestamp_fichiers.'<br>';
A titre de vérification, modifie cette ligne comme ceci :
while (false !== ($fichier= readdir('./')))
enregistre une copie du fichier .PHP dans le dossier "news", là où sont les fichiers à traiter et essaie-le.
Voilà ce qu'il renvoie :
Warning: opendir(new,new): in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 5
Warning: opendir(new): failed to open dir: No such file or directory in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 5
Warning: readdir() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 21
J'ai posté trop vite et modifié ensuite
Warning: opendir(new,new): in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 5
Warning: opendir(new): failed to open dir: No such file or directory in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 5
Warning: readdir() expects parameter 1 to be resource, string given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche des fichiers.php on line 21
Avec l'erreur ligne 21 qui se répète
Excuse-moi si ça fait brouillon mais je réponds trop vite.
Il faut laisser opendir avec $dossier=opendir('./');
et readdir($dossier);
1461059615
1461059615
1461059864
IN4.txt
Sa semble marcher
Il y a deux choses qui m’intriguent dans ce résultat.
Il y 2 valeurs identiques. Cela veut dire que deux fichiers ont été créés-modifiés avec moins d'une seconde de décalage ?
Que vient faire IN4.txt dans cette liste ?
Sinon et selon ce que j'ai pu lire sur les fonctions de date de fichiers, les erreurs proviennent généralement soit d'un chemin (path) mal écrit ce qui est souvent le cas sous Windows (*)
soit d'un problème de droits d'accès aux dossier-fichiers quand elles ne sont pas exécutées dans le même dossier que le fichier testé.
Les 2 cas étant possible chez toi, je ne vois pas comment identifier le problème ?
(*) PHP est au départ développé sous Linux. Il a été adapté à Windows mais les path restent un problème.
Selon la littérature et je n'arrive pas à trouver la bonne syntaxe, il faudrait écrire
soit C:\\dossier\fichier ;
soit C:/dossier/fichier ;
Ok, IN3 en fin de liste est donc le nom du dernier fichier testé.
Autre intrigue : les valeurs sont maintenant différentes. Tu as modifié les fichiers ?
Oui je les ai tous supprimer puis recréé.
En attendant mieux, il faut laisser le fichier .PHP dans le même dossier que les fichiers .txt
Il faut aussi éliminer le nom de fichier de la liste des timestamp. Remplacer :
parCode:$liste_fichiers[$i]=$fichier; $timestamp_fichiers=filectime($fichier); echo $timestamp_fichiers.'<br>';
Code:$liste_fichiers[$i]=$fichier; if(!strstr(filectime($fichier),'.txt'); { $timestamp_fichiers=filectime($fichier); echo $timestamp_fichiers.'<br>'; }
Je comprend pas bien pourquoi il met cette erreur :
Parse error: syntax error, unexpected '{' in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche.php on line 27
Code:while (false !== ($fichier= readdir($dossier))) { if(strpos($fichier,'.txt')>1 or strpos($fichier,'.TXT')>1) { $liste_fichiers[$i]=$fichier; if(!strstr(filectime($fichier),'.txt') { //ligne 27 $timestamp_fichiers=filectime($fichier); echo $timestamp_fichiers.'<br>'; } if($i==0) { $plus_grand_timestamp= $timestamp_fichiers; $nom_plus_recent=$fichier; } if($i>0) { if($timestamp_fichiers>$plus_grand_timestamp) { $plus_grand_timestamp=$timestamp_fichiers; $nom_plus_recent=$fichier; } } $i++; } }
erreur de ma part, il manque une parenthèse fermante :
Code:if(!strstr(filectime($fichier)),'.txt')
Erreur :
Parse error: syntax error, unexpected ',' in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\new\Index avec recherche.php on line 26
Ligne 26 :
Code:if(!strstr(filectime($fichier)),'.txt')
Pas d'erreur cette fois.
Par contre je test le script et je rencontre des problèmes, je vais essayer d'être clair.
Lorsque je créer un fichier texte i1 le code renvoie bien i1
je créé un deuxième fichier i2 je rafraîchie la page le code me renvoie i2
je créé un fichier i3 et i4 puis je test, le code me renvoie i3
Voilà les résultats :
1461062841
1461075134
1461075160
1461075160
i3.txt
En continuant mes test avec 8 fichiers :
1461062841 --> i1
1461075134 --> i2
1461075160 --> i3
1461075160 --> i4
1461075267 --> i5
1461075295 --> i6
1461075295 --> i7
1461075295 --> i8
i6.txt
Seul i3 et i4 puis i7 et i8 on été créé avant de râfraichir