Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2005, 10h47   #1
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
Par défaut [Configuration] recherche de texte dans un fichier

Bonjour,

J'ai une application qui contient le numéro ainsi que le mot de passe dans un fichier de configuration, je voudrais pouvoir modifier ces paramètres depuis un interface web...

Pour faire ceci il faut que je détecte si le fichier contient bien le numéro avec le mot de passe correspondant....

J'ai essayer de détecter ceci avec le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
 $numero = $HTTP_POST_VARS['numero'];
 $pin = $HTTP_POST_VARS['pin'];
 
 $ouvre=fopen("/etc/asterisk/voicemail.conf","r");        
 while(!feof($ouvre))                               
   {
    $lecture=fgets($ouvre,4096);                    
    $donnee=explode("\n",$lecture);                  
    $combien=count($donnee)-1;                       
 
    for($i=0;$i<=$combien;$i++)
      {
       if(ereg("\n".$numero." => ".$pin.",",$donnee[$i]));
         {
          //rediriger sur la page pour modifier le PIN
          fclose($ouvre);                                    
          header("location: testok.php");
         }
       else
         {
          //rediriger sur la page indiquant que le numéro ou l'ancien pin n'est pas correct
          fclose($ouvre);                                    //fermeture 
          header("location: testno.php");
         }
      }
   }
 
?>
Pour l'instant je veux juste détecter la ligne contenant ces informations mais ça ne fonctionne pas et je ne comnprend pas pourquoi?????

Le fichier contenant ces infos est ainsi:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
[general]
 
format=wav
 
serveremail=Asterisk
 
attach=yes
 
maxmessage=120
 
minmessage=2
 
skipms=3000
 
maxsilence=10
 
maxlogins=3
 
fromstring=Comedian VoiceMail 
 
saycid=no
 
sendvoicemail=yes
 
emailsubject=Nouveau message (${VM_MSGNUM}) de durée ${VM_DUR} dans la boîte vocale ${VM_MAILBOX} de la part de ${VM_CALLERID}
 
emailbody=Cher(e) ${VM_NAME},\n\n\tvous avez reçu un nouveau message de durée ${VM_DUR} (numéro ${VM_MSGNUM})\ndans la boîte vocale du numéro ${VM_MAILBOX} de la part de ${VM_CALLERID}.\n\nPensez donc à consulter vos messages!\n\n\n\t\t\t\t\t\t\t\t\t--Comedian VoiceMail\n
 
 
;*********************************************************************
; Profils des utilisateurs
;*********************************************************************
 
[sip]
numero => pin,prenom nom,adresse@email.com
 
301 => 2345,prenom nom,adresse@email.com
Est ce que quelqu'un sait ou se situe mon erreur, ou connaissez vous une manière de réaliser ceci...

Merci d'avance pour votre aide
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 11h09   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Pourquoi ca ne fonctionne pas ? Quel est le message d'erreur ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 11h16   #3
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
Au faite il va toujours sur testno.php
testno.php et testok.php affiche simplement ok ou no à l'écran, et dans tous les cas il va sur testno.php, donc je présume qu'il ne détecte pas le numéro et le code pin et en plus il faut quasiment 2 minutes pour que la page testno.php s'affiche??

Je ne comprend pas de quoi ça pourrait venir????

J'ai ensuite essayer de tester si avec la commande ereg j'arrivais à detecter simplement le numéro 301 avec le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?
 $numero = $HTTP_POST_VARS['numero'];
 $pin = $HTTP_POST_VARS['pin'];
 $new_pin = $HTTP_POST_VARS['newpin'];
 
 //test du mot de passe correspondant au numéro
 //ouverture et affichage du fichier voicemail.conf
 $ouvre=fopen("/etc/asterisk/voicemail.conf","r");        //ouverture du fichier en mode lecture
 while(!feof($ouvre))                               //tant qu'on est pas à la fon du fichier
   {
    $lecture=fgets($ouvre,4096);                    //stockage dans $lecture
    $donnee=explode("\n",$lecture);                 //parsing des données basé sur "\n"
    $combien=count($donnee)-1;                      //nombre d'élément du fichier
 
    for($i=0;$i<=$combien;$i++)
      {
       if(ereg("301",",$donnee[$i]));
         {
          //rediriger sur la page pour modifier le PIN
          fclose($ouvre);                                    //fermeture 
          header("location: testok.php");
         }
       else
         {
          //rediriger sur la page indiquant que le numéro ou l'ancien pin n'est pas correct
          fclose($ouvre);                                    //fermeture 
          header("location: testno.php");
         }
      }
   }
 
?>
Et j'obtient le même résultat. Il me redirige sur testno.php => ne détecte pas 301???
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 16h43   #4
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
Il n'y a pas quelqu'un qui suarait ou est le problème???
Merci de votre aide...
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 16h48   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Je serais toi, j'utiliserais plutot la foonction file
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 16h52   #6
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
Comment puis-je utiliser la fonction file() pour détecter un texte dans un fichier??????
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 17h05   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
file te permet juste d'éviter d'utiliser fgets, fopen, et cie
avec file tu obtiens un tableaux où une entrée == un ligne de ton fichier,
ensuite tu n'as plus qu'à cherhcer la ligne qui commence par "301 " et extraire le pin, si tu arrives à la fin c'est qu'il y a pas d'utilisateur.
Tu teste soit via regexp soit de manière "sale" ou "à l'ancienne" si tu préfères
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 17h09   #8
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
OK, merci beaucoup j'ai bien compris le principe grâce à toi.
ça signifie quoi :
Citation:
Tu teste soit via regexp soit de manière "sale" ou "à l'ancienne"
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 17h12   #9
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835


Les expression régulières sont puissantes et te permettent de vraimen selectionner ce que tu veux, le problème c'est que c'est complexe à prendre en main.
La manière "à l'ancienne" c'est de supposer que ta chaine sera bien formatée, qu'il y aura qu'un '=>' dans ta chaine et de jouer avec des comparaison de chaines qui deviennent vite ingérables...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 17h15   #10
Invité régulier
 
Inscription : octobre 2005
Messages : 32
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 32
Points : 7
Points : 7
AHHH, ok merci bien je te tiens au courant...

Merci encore une fois
carlos20 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2005, 17h25   #11
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<pre><?php
 
$numero = 301;
 
$pattern = "/^".$numero."[\s]*=>[\s]*(\d*)/";
 
$str = "301 => 2345,prenom nom,adresse@email.com";
 
preg_match($pattern, "301 => 2345,prenom nom,adresse@email.com", $matches);
var_dump($matches[1]);
 
preg_match($pattern, "301=>2345,prenom nom,adresse@email.com", $matches);
var_dump($matches[1]);
 
preg_match($pattern, "301      =>        2345,prenom nom,adresse@email.com", $matches);
var_dump($matches[1]);
 
preg_match($pattern, "301 => 2345 ,prenom nom,adresse@email.com", $matches);
var_dump($matches[1]);
 
preg_match($pattern, "303 => 2345 ,prenom nom,adresse@email.com", $matches); //ici pas le bon numero !
var_dump(isset($matches[1]));
 
?>
jette un oeil là dessus dans un nouveau script ca devrait t'aider...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h09.


 
 
 
 
Partenaires

Hébergement Web