Mon script donne des faux résultats [Résolu/Fermé]

Signaler
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
-
 karl -
Bonjour tout le monde,
j'ai besoin de vos conseils j'ai perdu assez de temps sans avancer
on faite je suis stagiaire et il ma était confié la mission suivant:

écrire un script php qui affiche une alerte si un consommateur a consommé plus de 10 euro par appel téléphonique

Sur le serveur je reçois des fichiers csv tout les 60min, les fichiers csv contiennent les détails de consommation, ce qui m’intéresse dans les détails de consommation est le champs du prix .

je dois écrire le script qui lit chaque nouveau fichier qui arrive , regardé toute les lignes du fichier et si le champ du prix dépasse 10€ , une alerte sera afficher et toute la ligne contenant la valeur>10 € sera copié dans un autre fichier a part .

ensuite pour éviter que l'alerte s'affiche plusieurs fois a chaque fois un nouveau ficher csv arrive sur le serveur je dois me rassuré si l'alerte a était déjà faite, si oui j'affiche rien si non j'affiche l'alerte .

pour faire cela je dois comparer la nouvelle ligne ou il ya une valeur>10 au lignes stocké avant dans le fichier a part pour voir si elle existait déjà ou pas, pour décider d'afficher l'alerte ou pas .

concernant l’exécution automatique du script c'est l'admin qui s'en occupe avec une tache planifié, donc c'est pas moi qui doit le faire

j’espère que j'était clair dans la desciption

je suis débutant en php et depuis 1 mois je tourne en rond :(
j'ai écris un script mais ce dernier n'arrive pas à comparer la nouvelle ligne (prix>10) et les lignes déjà stocké dans un fichier à part, pour lui l'alerte et toujours nouvelle , voila mon code peut être quelqu'un verra ce que je n'est pas pu voir.
je vous remercie d'avance
<?php
// path du dossier [/contents/1088-formats-et-extensions-de-fichiers CDR] 0 remplacer par le chemin correspondant lors de la mise du script sur le serveur
$dir = "C:\Users\Master\Desktop\quotidien\CDRs";
 
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
        $chaine= $file[8]."".$file[9]."".$file[10]."".$file[11]."".$file[12]."".$file[13]."".$file[14]."".$file[15]."".$file[16]."".$file[17]."".$file[18]."".$file[19]."".$file[20]."".$file[21] ;
            //echo $chaine."".'</br>' ;
      
      $compteur= $chaine ;
// path a remplacer lors de la mise du script sur le serveur
$filename = "C:\Users\Master\Desktop\quotidien\CDRs\Pacetel_".$compteur.".cdr";
 
$ligne= file($filename); //lit le fichier entier et le place dans un tableau
 
$nbTotalLignes=count($ligne);
 
for($i=1;$i<$nbTotalLignes;$i++){
    // On place chaque élément séparé par un dans un tableau
    $ligneTab = explode(";",$ligne[$i]);
     
     
    $seuil=10;
    if ($ligneTab[8] >= $seuil){
    //echo "alerte".'</br>'."$ligne[$i]"."".'</br>'."".$filename."".'</br>' ;
    
    $fichier_cible = "C:\Users\Master\Desktop\quotidien\CDRtest\seuil.txt";
    $current = file_get_contents($fichier_cible);
    $current .= $ligne[$i] ;
    if(!file_put_contents($fichier_cible,$current)){
      echo "la copie du $ligne[$i] a échoué ..\n " ;
    }
  $fichier_alert = fopen($fichier_cible,'r+');

  
while(($ligne_alert = fgets($fichier_alert))!== false){
  
    if (strcmp($ligne_alert, $ligne[$i]) == 0) {
    echo "alerte deja signalé".'</br>'."$ligne[$i]"."".'</br>'."".$filename."".'</br>' ;
  }
  else{
    echo "alerte".'</br>'."$ligne[$i]"."".'</br>'."".$filename."".'</br>' ;
    //$message = " coutCDR depassement du seuil".$ligne[$i];
        //[/contents/170-introduction-au-courrier-electronique mail]('monmail@mail.fr', 'Alerte CDR', $message);
  }
}
    // echo '<script language="JavaScript">alert(\'depassement du seuil de consommation\');</script>';    
    }      
     
}
      
      
        }
        closedir($dh);
    }
}

 
?>




2 réponses

Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
188
bonjour

j'ai pas regardé dans le détail si il y a une erreur mais, pour commencer, dans ton CSV t'aurai pas une valeur qui peux servir d'identifiant ? Une valeur unique par ligne et qui donc servirait à être comparée. Plutôt que de tester des lignes entières avec strcomp
>
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016

le script que vous avez ins�r� est faux
le script que vous avez ins�r� est faux
Nouvelles du Site
Un seedant
Un seedant (403 + Télécharger)

Bonjour


Quelques petites turbulences font que certains usagers ont une "disparition" du bouton "Télécharger" : pour la solution cliquer ici ou aller ici http://www.t411.ch/forum.php?#/discussion/comment/649859
ou des "http error 403" : pour la solution, cliquer ici ou aller ici : http://www.t411.ch/forum.php?#/discussion/70650/tracker-status-http-error-403

Si vous ne parvenez pas à résoudre un souci, t411 a créé un système de communication entre les usagers qui tourne à plein rendement et
qui est d'une efficacité redoutable en ce qui concerne les demandes d'aide.
Entre les Shouts, le canal IRC, le forum, le dokuwiki, la faq et les messageries, ça fait là pas mal de phares pour être guidé dans les ténèbres.
Pour voir comment y accéder, cliquer ici

N'oubliez pas que ceux que vous solliciterez sont tous des bénévoles et qu'ils vous répondent principalement par générosité.

Merci.
Le Staff

Par adventhybrid

Voir l'image en plus grand
Vous pouvez envoyer un message de remerciements aux dessinateurs et
voir toutes les mascottes qui ont fait la une en Cliquant ICI


Les candidatures sont toujours ouvertes pour la Team Pending et la Modération Forum

Par modo1er à 2016-09-27 10:01:20
En lire plus »
Upload académie
Informations

Merci d'être au maximum autonome pour ne pas user les bénévoles qui gèrent le site.

1- FAQ
2- Guide pour bien débuter sur t411
3- Règles d'upload
4- Bientôt en partage sur t411
5- Comprendre, gérer et remonter son ratio
6- Clients bittorrent recommandés sur le site
7- Déclarer Très Haut Débit, Seedbox, Fibre, VDSL, freeboxV6, NAS, etc.)?
8- Ce qu'il faut savoir sur les dons et quoi faire en cas de problème.

9- Blocage des onglets et autres problèmes d'affichage : Comment y remédier

10- Vous avez mis vos identifiants sur un site imitant t411: Changer de Mot de Passe et renouveler Passkey

11- Blocage t411 : Modification des DNS
12- Pour les NAS synology
13- Problème Download - Erreur 403 : Voir ici

14- Modifications des règles d'upload

15- État des services (tracker et site)
>
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016

c'est la page d’accueil du site t411
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016

désolé pour la réponse tardive , voila une ligne de un de mes csv
NetPresel;VoiS;05449441015;00254944101;20140619;052320;11;0826100860;0.18400;;;;;
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
188
ok, si j'ai dix minutes aujourd'hui j'essaierai de regarder !
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016

merci Mimiste , ça va m'aider énormément :-)
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
188
Voila ce que ça donne, c'est fonctionnel, juste adapter les chemins des fichiers

<?php
$inputFilePath = "test.csv"; //fichier en entrée 
$outputFilePath = "seuil.txt"; //fichier en sortie
$limitToCheck = 10; //seuil
$pricePositionInCSV = 8; //position du prix dans le csv

//Ouverture des fichiers d'entrée et de sortie
$inputFileResource = fopen($inputFilePath,'r');
$outputFileResource = fopen($outputFilePath,'r+');

//On vérifie si l'ouverture des fichiers a réussie
if ($inputFileResource && $outputFileResource){
  
  //On parcours chaque ligne du fichier d'entrée
  while (!feof($inputFileResource)){ 
     $lineInput = chop(fgets($inputFileResource)); //On extrait la ligne courante
     $ar = explode(";",$lineInput);
     $valueToTest = $ar[$pricePositionInCSV];
    
     //On verifie si la valeur dépasse le seuil max
     if (floatval($valueToTest) >= $limitToCheck){
       //La valeur dépasse la limite, on vérifie si elle a déja été ajoutée au fichier de sortie
       $found = false;
       rewind($outputFileResource); //On renvoi le curseur au debut du fichier
       while (!feof($outputFileResource)){ 
         $lineOutput = chop(fgets($outputFileResource)); //On extrait la ligne courante
         if ($lineOutput == $lineInput){ //On compare la ligne en entrée avec la ligne du fichier de sortie
           $found = true;
         }
       }
       
       if ($found){
         //On a trouvé une correspondance dans le fichier de sortie, on ne fait rien
       } else {
         //On a pas trouvé de correspondance dans le fichier, on ajoute la ligne
         //On place le curseur à la fin du fichier
         fseek($outputFileResource, 0, SEEK_END);
         //On écrit la ligne
         fwrite($outputFileResource, $lineInput."\r\n");
       }
     } else {
       //La valeur ne dépasse pas la limite, on ne fait rien
     }
  }  

  //On ferme les flux
  fclose($inputFileResource);
  fclose($outputFileResource);
}
 
?>
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016

un grand merci Mimiste vous m'avez sauvé , c'est un code bien lisible et compréhensible
je adapté le fichier d'entré pour qu'il reçois mes csv car ils sont issus d'une boucle, cette adaptation à affecté cette ligne de votre code $valueToTest = $ar[$pricePositionInCSV];
par conséquence ça généré ce code d'erreur :
Notice: Undefined offset: 8 in C:\wamp\www\application\quotidien.php on line 37
si non voila ce que ça donne après l'adaptation
<?php
// path du dossier CDR 0 remplacer par le chemin correspondant lors de la mise du script sur le serveur
$dir = "C:\Users\Master\Desktop\quotidien\CDRs";
 
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
			
			if( $file == '.' || $file == '..' )
				
				continue;
				
        $chaine=  substr($file, 8, -4);
		
			$compteur= $chaine ;
			
// path a remplacer lors de la mise du script sur le serveur
//fichier en entrée 
$inputFilePath = "C:\Users\Master\Desktop\quotidien\CDRs\Pacetel_".$compteur.".cdr";
 
$outputFilePath = "C:\Users\Master\Desktop\quotidien\CDRtest\seuil.txt"; //fichier en sortie
$limitToCheck = 10; //seuil
$pricePositionInCSV = 8; //position du prix dans le csv

//Ouverture des fichiers d'entrée et de sortie
$inputFileResource = fopen($inputFilePath,'r');
$outputFileResource = fopen($outputFilePath,'r+');

//On vérifie si l'ouverture des fichiers a réussie
if ($inputFileResource && $outputFileResource){
  
  //On parcours chaque ligne du fichier d'entrée
  while (!feof($inputFileResource)){ 
     $lineInput = chop(fgets($inputFileResource)); //On extrait la ligne courante
     $ar = explode(";",$lineInput);
     $valueToTest = $ar[$pricePositionInCSV];
    
     //On verifie si la valeur dépasse le seuil max
     if (floatval($valueToTest) >= $limitToCheck){
       //La valeur dépasse la limite, on vérifie si elle a déja été ajoutée au fichier de sortie
       $found = false;
       rewind($outputFileResource); //On renvoi le curseur au debut du fichier
       while (!feof($outputFileResource)){ 
         $lineOutput = chop(fgets($outputFileResource)); //On extrait la ligne courante
         if ($lineOutput == $lineInput){ //On compare la ligne en entrée avec la ligne du fichier de sortie
           $found = true;
         }
       }
       
       if ($found){
         //On a trouvé une correspondance dans le fichier de sortie, on ne fait rien
       } else {
         //On a pas trouvé de correspondance dans le fichier, on ajoute la ligne
         //On place le curseur à la fin du fichier
         fseek($outputFileResource, 0, SEEK_END);
         //On écrit la ligne
         fwrite($outputFileResource, $lineInput."\r\n");
       }
     } else {
       //La valeur ne dépasse pas la limite, on ne fait rien
     }
  }  

  //On ferme les flux
  fclose($inputFileResource);
  fclose($outputFileResource);
}

		}
		
	}
	closedir($dh);
}		
?>
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016

j'ai fait un var_dump($valueToTest); ca montre que $valueToTest conntient bien les prix et la première ligne du csv est de type caractère , peut être c'est ça qui fait l'erreur!!
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
188
ha oui c'est ligne par ligne, alors j'imagine que si t'a une ligne qui ne ressemble pas aux autres, genre qui n'est pas un csv, t'a un tour de boucle qui fera une erreur
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
>
Messages postés
1158
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016

Merci Mimiste pour ce script , il est fonctionnel cela ma permis de bien avancer