J'ai remplacé et j'ai les erreurs photo ci-joint (cap1)
J'ai ensuite remplacé
parCode:while ($fichiers = readdir($dossier))
Le code est :Code:while ($fichier = readdir($dossier))
Screen des erreurs ci-joints (cap2). Les erreurs ligne 45 et 48 ce reproduisent à l'infinie.Code:while ($fichier = readdir($dossier)) { if (eregi('txt',$fichier) or eregi('.TXT',$fichier)) { $liste_fichiers[$i]=$fichier; $timestamp_fichiers=time($fichier); 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++; } } closedir ($dossier); $fichier = fopen($nom_plus_recent,"r"); //ligne 43 while (!feof($fichier)) //ligne 45 { $nb_lignes=$nb_lignes+1; $lignes[$nb_lignes]= fgets($fichier, 256); //ligne 48 } fclose($fichier); for($i=$nb_lignes;$i>=0;$i--) { $ligne_lue=$lignes[$i]; if(strstr($ligne_lue,'debut')) { $valeurs=explode(' ',$ligne_lue); // Attention : $ligne_lue // on éclate la ligne lue en autant d'unités que d'espaces trouvés dans la ligne $temperature=$valeurs[2]; $humidite=$valeurs[3]; $vitesse=$valeurs[4]; $direction=$valeurs[5]; $pluviometrie=$valeurs[6]; $polution=$valeurs[7]; $pression=$valeurs[8]; break; // on a trouvé les données donc on arrête la boucle } }
Le premier warning indique qu'il ne peut pas ouvrir le fichier "1.txt".
Regarde les droits (lecture-écriture) sur ce fichier.
Les droits d'écriture et lecture sont bien cochés pour les différents groupes : Système, Utilisateurs et Administrateurs
OK alors essaie de remplacer :
parCode:$dossier = opendir ('./');
Code:$dossier = opendir ('C:\Progam files(X86)\...chemin complet du dossier\');
Non toujours pas, j'ai essayé aussi de placer le dossier 'new' dans le dossier eds-www de Easyphp, et rien.
Ouvrir le fichier '1' au lieu de '1.txt' ne fonctionnerait pas ?
Non il n'y a aucune raison.
Place l'ensemble des fichiers dans le dossier www
remplace
$dossier = opendir ('./');
par
Code:$dossier = opendir(); echo $dossier;
Il m'affiche : Resource id #3
Puis évidemment les mêmes erreurs qu'au préalabe
Au moins on sait que opendir fonctionne !
remplace :
parCode:if (eregi('txt',$fichier) or eregi('.TXT',$fichier));
Code:if ( preg_match('.txt',$fichier) or preg_match('.TXT',$fichier));
Toujours pas, sa ne serait pas drôle si ça marchais du premier coup
Edit : Les erreurs de Cap4 surviennent lorsqu'on remplace à la ligne 23 '.txt' par 'txt'Code:<html> <?PHP $nom=1; $dossier = opendir ('C:\Users\Gamer\Desktop\new'); echo $dossier; $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 ($fichier = readdir($dossier)) { if ( preg_match('.txt',$fichier) or preg_match('.TXT',$fichier)); //ligne 23 { $liste_fichiers[$i]=$fichier; $timestamp_fichiers=time($fichier); 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++; } } closedir ($dossier); $fichier = fopen($nom_plus_recent,"r"); //ligne 44 while (!feof($fichier)) //ligne 46 { $nb_lignes=$nb_lignes+1; $lignes[$nb_lignes]= fgets($fichier, 256); //ligne 49 } fclose($fichier); for($i=$nb_lignes;$i>=0;$i--) { $ligne_lue=$lignes[$i]; if(strstr($ligne_lue,'debut')) { $valeurs=explode(' ',$ligne_lue); // Attention : $ligne_lue // on éclate la ligne lue en autant d'unités que d'espaces trouvés dans la ligne $temperature=$valeurs[2]; $humidite=$valeurs[3]; $vitesse=$valeurs[4]; $direction=$valeurs[5]; $pluviometrie=$valeurs[6]; $polution=$valeurs[7]; $pression=$valeurs[8]; break; // on a trouvé les données donc on arrête la boucle } }
Les fichiers joints n'étant pas encore lisibles, je suppose que les alertes "deprecated" et "notice" auront disparu" ?
Je ne crois pas que ça fonctionne :
$dossier = opendir ('C:\Users\Gamer\Desktop\new') ;
On en avait déjà parlé au début du fil et je croyais ce problème réglé.
Met tous les fichiers dans le dossier www, avec le fichier index.php
enlève les deux points
Elles ont été remplacé :
Resource id #3
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: fopen(.): failed to open stream: Permission denied in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 44
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Effectivement je prend bien en compte votre remarque du début du fil, et je teste avec les deux méthodes à chaque fois
J'ai oublié de vous mettre dans le cas où on écrit '.txt' :
Resource id #3
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
Warning: fopen(.): failed to open stream: Permission denied in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 44
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
J'ai beau chercher sur internet, je trouve pas de réponse à ce :
Warning: preg_match(): No ending delimiter '.' found in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
apparemment, preg_match voit le point comme un caractère spécial. Enlève les points dans les chaines txt puisqu'ils ne jouent pas de rôle particulier.
Ceci dervrait fonctionner :
Code:preg_match('txt',$fichier) or preg_match('TXT',$fichier)
J'ai déjà essayé, et il me renvoie :
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
essaie ça :
Code:if(stropos($fichier,'txt')>1 or stropos($fichier,'TXT')>1)
J'ai uniquement cette erreur :
Fatal error: Call to undefined function stropos() in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 23
oups, c'est strpos
Une erreur de disparu !
Il reste donc celle là :
Warning: fopen(0): failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 44
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Les erreurs ligne 46 et 49 se répètent à l'infinie.
Code:while ($fichier = readdir($dossier)) { if(strpos($fichier,'.txt')>1 or strpos($fichier,'.TXT')>1) { $liste_fichiers[$i]=$fichier; $timestamp_fichiers=time($fichier); 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++; } } closedir ($dossier); $fichier = fopen($nom_plus_recent,"r"); //ligne 44 while (!feof($fichier)) //ligne 46 { $nb_lignes=$nb_lignes+1; $lignes[$nb_lignes]= fgets($fichier, 256); //ligne 49 }
J'ai essayé de changer les modes d'ouvertures pour la fonction fopen, sans grand succès je repasse sur le mode "r", et là sans raison apparente sa fonctionne, du moins quasiment.
Resource id #3
Notice: Undefined offset: 0 in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 54
Notice: Undefined variable: temperature in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 107
Notice: Undefined variable: humidite in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 109
Puis pleins d'erreurs de variables inexistantes, ces erreurs seront réglées du moment où celle ligne 54 le sera.
Code:while (!feof($fichier)) { $nb_lignes=$nb_lignes+1; $lignes[$nb_lignes]= fgets($fichier, 256); } fclose($fichier); for($i=$nb_lignes;$i>=0;$i--) { $ligne_lue=$lignes[$i]; //ligne 54 if(strstr($ligne_lue,'debut')) { $valeurs=explode(' ',$ligne_lue); // Attention : $ligne_lue // on éclate la ligne lue en autant d'unités que d'espaces trouvés dans la ligne $temperature=$valeurs[2]; $humidite=$valeurs[3]; $vitesse=$valeurs[4]; $direction=$valeurs[5]; $pluviometrie=$valeurs[6]; $polution=$valeurs[7]; $pression=$valeurs[8]; break; // on a trouvé les données donc on arrête la boucle } }
Désolé pour les posts à répétions, mais je commence à comprendre.
Pour que le programme ouvre le 'sms.txt' par exemple, il faut que ce fichier soit à la fois dans le dossier 'new' qui est dans eds-www et à la fois dans eds-www.
Je vous met un screen.
Non il n'y a aucune raison.
Le problème vient de l'instruction closedir. Il faut la déplacer en dessous de la ligne 49.
Sa na pas fonctionner :
Erreurs :Code:while ($fichier = readdir($dossier)) { if(strpos($fichier,'.txt')>1 or strpos($fichier,'.TXT')>1) { $liste_fichiers[$i]=$fichier; $timestamp_fichiers=time($fichier); 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++; } } $fichier = fopen($nom_plus_recent,"r"); while (!feof($fichier)) { $nb_lignes=$nb_lignes+1; $lignes[$nb_lignes]= fgets($fichier, 256); closedir ($dossier); } fclose($fichier); for($a=$nb_lignes;$a>=0;$a--) { $ligne_lue=$lignes[$a]; if(strstr($ligne_lue,'debut')) { $valeurs=explode(' ',$ligne_lue); // Attention : $ligne_lue // on éclate la ligne lue en autant d'unités que d'espaces trouvés dans la ligne $temperature=$valeurs[2]; $humidite=$valeurs[3]; $vitesse=$valeurs[4]; $direction=$valeurs[5]; $pluviometrie=$valeurs[6]; $polution=$valeurs[7]; $pression=$valeurs[8]; break; // on a trouvé les données donc on arrête la boucle } }
Warning: fopen(sms.txt): failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 46
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 52
Warning: feof() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 49
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 52
Warning: closedir(): 3 is not a valid Directory resource in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 53
Avec les erreurs lignes 49, 52, 53 qui se répètent.
Remet closedir à sa place initiale.
A la place de fopen, met ceci :
Code:$chemin= opendir('c:\chemin\vers\dossier').'\'; $chemin_fichier=$chemin.$nom_plus_recent; echo '<br>'.$chemin_fichier.'<br>'; $fichier = fopen($chemin_fichier,"r");Celles là sont normales puisque le fichier n'a pas été ouvertAvec les erreurs lignes 49, 52, 53 qui se répètent.
Le : .'\' est une erreur de frappe ? Je l'ai enlevé car sa me met en gris tout le reste du programme.
Erreurs :
Resource id #4sms.txt
Warning: fopen(Resource id #4sms.txt): failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\index - Copie.php on line 50
Code:$chemin= opendir('new'); $chemin_fichier=$chemin.$nom_plus_recent; echo '<br>'.$chemin_fichier.'<br>'; $fichier = fopen($chemin_fichier,"r");
Du cou après quelque tentative, j'ai réussit avec ce code :
Le programme semble bien fonctionner. Votre idée de stocker les valeurs est très bien pour après faire des graphiques et ainsi voir l'évolution de la météo. Cependant je préfère d'abord répondre au cahier des charges du projet le plus "simplement possible" et une fois fini, me lancer dans des améliorations.Code:$chemin='new'; $fichier = fopen($chemin.'/'.$nom_plus_recent,"r");
Etant donné que je ne sais pas si gammu supprime le contenu du dossier INBOX, je préfère faire un script qui se lancerais tous les X temps avec la commande cron de raspberry qui est la même que celle de linus.
J'avais l'idée de me servir du code que vous m'aviez écrit :
Et remplacer la variable $i par un nombre. Par exemple si on décide de supprimer les fichiers toutes les semaines, la valeur de $i serait : 24 * 7 = 168 (on envoie un message toutes les heures)Code:for($j=0;$j<$i;$j++) { unlink($liste_fichiers[$j]); }
J'ai un peu "peur" de cette méthode, au cas où on aurait un message non envoyé, et donc je suppose que sa ferais un bug.
Existe t'il une autre manière de supprimer les fichiers d'un dossier via php (ou via autre) ?
Je ne suis pas sûre d'avoir comprit ce code mais imaginons qu'on charge la page une première fois, le site s'affiche, mais si on la recharge une deuxième fois derrière, il n'y aura plus de fichier et donc la page va afficher des erreurs. Car les fichiers sont envoyés toutes les heures, non ?