Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1740 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Script qui tourne en boucle online et nickel en local... ???

 

Sujet(s) à lire :
    - [PHP] Script qui boucle.........
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script qui tourne en boucle online et nickel en local... ???

n°1224108
le_duc
PlaTyPuS
Posté le 16-10-2005 à 20:47:29  profilanswer
 

Yop yop
 
Je comprends plus rien... j'ai un script PHP qui tourne nickel en local avec easyPHP, mais online, il tourne en boucle!!!  :pt1cable:  :pt1cable:  
 
En local (easyPHP): PHP4.x
Online: PHP5
 
Voilà le script:

Code :
  1. if(isset($_GET['makeOnlineStats']))
  2.  {
  3.   // on fais une requete dans la table horaireScan pour le jour actuel et l'heure actuelle
  4.   // si dans la table horaireScan on retrouve une entrée pour l'heure actuelle, alors le script doit etre exécuté!
  5.   // pour les jours de la semaines, ( 0  = Lundi, 1  = Mardi, ... 6  = Dimanche)
  6.   $horaire = $db->query('SELECT * FROM '.TABLE_HORAIRE_SCAN.' WHERE numJour = WEEKDAY(NOW()) AND heure = HOUR(NOW())');
  7.   if(mysql_num_rows($horaire))
  8.   {
  9.    $result = $db->query('SELECT id, ftp1, ftp2, portFtp FROM '.TABLE_USER.'');
  10.    $nbreProprios = mysql_num_rows($result);
  11.    // on met un temps d'exécution pour le script "raisonnable" (30sec c'est longtemps pas assez!)
  12.    set_time_limit(400);
  13.    // on enlève les warnings...car sinon ca emmerde :-S
  14.    error_reporting(~E_WARNING);
  15.    while ($row = mysql_fetch_assoc($result))
  16.    {
  17.     // Champs nécessaire au test online ou pas
  18.     $ftp1 = $row["ftp1"];
  19.     $ftp2 = $row["ftp2"];
  20.     $portFtp = $row["portFtp"];
  21.     // Champs nécessaire à l'ajout dans la table de stat
  22.     $idProprios = $row["id"];
  23.     $openOrNot = '';
  24.     if(ServerOnline($ftp1, $ftp2, $portFtp))
  25.     {
  26.      //si le serveur du proprios est online, openOrNot vaut 0
  27.      $openOrNot = '0';
  28.     }
  29.     else
  30.     {
  31.      //sinon openOrNot vaut 1
  32.      $openOrNot = '1';
  33.     }
  34.     // et on insère le résultat avec l'id du proprios dans la table 'onlinestats'
  35.     $db->query('INSERT INTO '.TABLE_ONLINESTATS.' SET idProprios = '.$idProprios.', date = NOW(), online = '.$openOrNot.'');
  36.    }
  37.    // et on supprime les enregistrements vieux de 3 mois et +
  38.    $db->query('DELETE FROM '.TABLE_ONLINESTATS.' WHERE MONTH(date) < (MONTH(NOW()) - 3)');
  39.    echo  '<br><br>
  40.       -> '.$nbreProprios.' serveurs scannés<br>
  41.       -> Stats pour chaque proprios updaté<br>
  42.       -> Stats de plus de '.$dureeAncienStats.' mois supprimés<br>';
  43.   }
  44.   else
  45.   {
  46.    echo 'Ce n\'est pas l\'heure pour faire un scan :-D !';
  47.   }

ce script permet de savoir si des serveur FTP sont online en se basant sur une table horaire (avec pour chaque jour des horaires de scann différent)
 
Si qqn a une idée... ? Merci d'avance.
 
@++


Message édité par le_duc le 25-10-2005 à 19:01:07
mood
Publicité
Posté le 16-10-2005 à 20:47:29  profilanswer
 

n°1224118
esox_ch
Posté le 16-10-2005 à 21:16:52  profilanswer
 

Mmmm c'est pas toi qui a fait le script non?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1224119
le_duc
PlaTyPuS
Posté le 16-10-2005 à 21:19:27  profilanswer
 

si, pkoi?

n°1224121
esox_ch
Posté le 16-10-2005 à 21:21:51  profilanswer
 

Disons que ca me semble assez soffisitqué pour qqn qui arrive pas a debugger son propre script...  A part ca , a 1ere vue je vois rien qui doit boucler a l'infinit en cas d'une version differente ... T'es sur que c'est la que ca boucle?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1224124
le_duc
PlaTyPuS
Posté le 16-10-2005 à 21:28:55  profilanswer
 

bah, ca fait qd même 2 ans que je suis une école d'informatique... bon on fait pas de PHP, mais qd on a les bases, ca va ;) :)
 
Et normally j'arrive à debugger moi-même, mais là j'ai déjà essayé plein de trucs, dont l'inclusion d'un compteur dans la boucle qui devrait arreter celle-ci lorsque le nombre d'enregistrement de la requete sql est atteint, mais ca continue qd meme :pt1cable:
 
je suis pas sûr que ce soit la boucle en elle-même qui foire...

n°1224126
KangOl
Profil : pointeur
Posté le 16-10-2005 à 21:42:26  profilanswer
 

deja enleve l'effacement des warning peut etre que tu auras plus d'infos...


---------------
Nos estans firs di nosse pitite patreye...
n°1224128
le_duc
PlaTyPuS
Posté le 16-10-2005 à 21:52:43  profilanswer
 

alors si je laisse les Warnings, j'ai ca:
 

Code :
  1. Warning: fsockopen(): unable to connect to xxx.xxx.xxx:21 in e:\mes documents\mes sites web\sparta-proprios v2\stats.php on line 175
  2. Warning: fsockopen(): php_network_getaddresses: gethostbyname failed in e:\mes documents\mes sites web\sparta-proprios v2\stats.php on line 175

ligne 175 = 1er fsockopen de la fonction ci-dessous!

  • le 1er Warning est normal...pasque si il arrive pas a se connecter à un serveur (p.e. offline), il me met ce Warning
  • le 2e, je sais pas trop ce que c'est...


 
la fonction qui émet les warning (au cas ou ;))

Code :
  1. function ServerOnline($ftp1, $ftp2, $portFtp)
  2. {
  3.  $fp = fsockopen ($ftp1, $portFtp, $errorNo, $errorStr, 3);
  4.  if($fp)
  5.  {
  6.   return true;
  7.  }
  8.  else
  9.  {
  10.   // puis on ouvre sur l'adresse de secour
  11.   if($ftp2 != '')
  12.   {
  13.    $fp = fsockopen ($ftp2, $portFtp, $errorNo, $errorStr, 3);
  14.    if($fp)
  15.    {
  16.     return true;
  17.    }
  18.    else
  19.    {
  20.     return false;
  21.    }
  22.   }
  23.  }
  24.  fclose($fp);
  25. }


Message édité par le_duc le 16-10-2005 à 22:22:56
n°1224406
le_duc
PlaTyPuS
Posté le 17-10-2005 à 12:52:51  profilanswer
 

c'est ca qui merde :
 

Code :
  1. error_reporting(~E_WARNING);


 
je capte vraiment pas! en local cette ligne ne fait rien de spécial (elle enlève les warnings koi...) et online elle fait tourner tout le script en boucle....???!!!!

n°1224411
FlorentG
Posté le 17-10-2005 à 12:59:53  profilanswer
 

// on enlève les warnings...car sinon ca emmerde :-S
error_reporting(~E_WARNING);


 
[:johneh] [:johneh] [:johneh] P'tain y'a des fois...

n°1224599
le_duc
PlaTyPuS
Posté le 17-10-2005 à 14:40:47  profilanswer
 

en fait faut que je mette la ligne suivante sinon ca tourne en boucle :
 

Code :
  1. error_reporting(E_WARNING);


 
mais c over-chiant tout ces warnings... surtout que ces des warnings "logique"!! -> si il ne peut pas se connecter à un serveur, il émet un warning... mais je m'en fous moi! :D

mood
Publicité
Posté le 17-10-2005 à 14:40:47  profilanswer
 

n°1224606
FlorentG
Posté le 17-10-2005 à 14:45:41  profilanswer
 

Ben s'il peut pas se connecter à un serveur, alors il faut un fallback qui va par exemple stopper le script et afficher un message d'erreur, ou faire quelque chose d'autre. On peut aussi mettre une belle arobase devant la fonction pour éviter les messages d'erreurs. Mais surtout pas reposer sur des pfüsch dans ce genre :(

n°1224625
le_duc
PlaTyPuS
Posté le 17-10-2005 à 15:10:54  profilanswer
 

t'aurais un exemple ou doc pour faire les trucs que tu dis?
 
pasque moi à part les try-catch, je connais rien :D
 
thx, @++

n°1224627
FlorentG
Posté le 17-10-2005 à 15:15:34  profilanswer
 

php.net [:spamafote]

n°1224634
le_duc
PlaTyPuS
Posté le 17-10-2005 à 15:24:24  profilanswer
 

ahhhh donc qd on met un "@" devant une fonction, ca bloque les erreurs ?  
 
c cool ca :)

n°1224638
FlorentG
Posté le 17-10-2005 à 15:27:27  profilanswer
 

Ouais enfin ça veut pas dire qu'il faut en mettre partout ;) C'est à utiliser que dans certains cas particuliers...

n°1224819
le_duc
PlaTyPuS
Posté le 17-10-2005 à 18:00:02  profilanswer
 

bon c'est quand même trop trop trop bizarre cette histoire!!!
 
Voilà le script avec les fsockopen():

Code :
  1. function ServerOnline($ftp1, $ftp2, $portFtp)
  2. {
  3.  $temp = error_reporting(E_WARNING);
  4.  $fp = fsockopen ($ftp1, $portFtp, $errorNo, $errorStr, 3);
  5.  if($fp)
  6.  {
  7.   return true;
  8.  }
  9.  else
  10.  {
  11.   // puis on ouvre sur l'adresse de secour
  12.   if($ftp2 != '')
  13.   {
  14.    $fp = fsockopen ($ftp2, $portFtp, $errorNo, $errorStr, 3);
  15.    if($fp)
  16.    {
  17.     return true;
  18.    }
  19.    else
  20.    {
  21.     return false;
  22.    }
  23.   }
  24.  }
  25.  fclose($fp);
  26.  error_reporting($temp);
  27. }


 
Comme ca ca fonctionne nickel! (mais ca m'affiche plein de warning -> unable to connect... mais ca c normal)
 
Maintenant si j'ajoute juste un "@" devant fclose($fp); , ca tourne en boucle.... jusqu'à ce que le temps limite de l'exécution du script soit atteint! (idem si j'ajoute un "@" devant les fsockopen()!)
 
:?:


Message édité par le_duc le 17-10-2005 à 18:01:25
n°1224821
anthomicro
Posté le 17-10-2005 à 18:03:15  profilanswer
 

Salut,
 
réduit le temps alloué avant que ta fonction retourne une erreur :
 
http://fr.php.net/manual/fr/functi [...] imeout.php

n°1224826
le_duc
PlaTyPuS
Posté le 17-10-2005 à 18:09:16  profilanswer
 

anthomicro a écrit :

Salut,
 
réduit le temps alloué avant que ta fonction retourne une erreur :
 
http://fr.php.net/manual/fr/functi [...] imeout.php


 
en ajoutant cette ligne juste après les 2 ligne de fsockopen(), ca me fait encore plus de warnings....  :pt1cable:  
 

Code :
  1. stream_set_timeout($fp, 2);


Message édité par le_duc le 17-10-2005 à 18:13:34
n°1225272
shakpana
des fois, j'me demande ...
Posté le 18-10-2005 à 12:15:59  profilanswer
 

alors juste 2 trucs:
 
1. fermes le socket que s'il a été ouvert - logique, non ? et hop un Warning en moins
2. utilises un @ sans soucis sur fsockopen, comme décrit plus haut, parce que cette fonction permet de renvoyer un numéro d'erreur, et fais ton contrôle d'erreur sur ce $errno, 0 => tout va bien, 10060 => timeout, no response, les autres à voir ...
 
donc :  
[pseudocode]
serverOnline()
je tente silencieusement d'ouvrir un socket
si le socket a été ouvert, je le ferme, je renvoi 0
si le socket n'a pas été ouvert, J'ESSAYE PAS DE LE FERMER, et je renvoi $errno et/ou $errstr
 
boucle($ips)
pour toutes mes IPs, si serverOnline() est 0, c'est cool, sinon je sais avec $errno/$errstr pourquoi ça n'a pas fonctionné
[/pseudocode]

 
et peut-être qu'un set_time_limit ( nombre_vachement_grand_voir_zero ); vaudrait le coup, ou tu as p.e. un système de point de récup. en cas d'arrêt brutal de l'exe ...

n°1226634
le_duc
PlaTyPuS
Posté le 19-10-2005 à 20:49:14  profilanswer
 

shakpana a écrit :

alors juste 2 trucs:
 
1. fermes le socket que s'il a été ouvert - logique, non ? et hop un Warning en moins
2. utilises un @ sans soucis sur fsockopen, comme décrit plus haut, parce que cette fonction permet de renvoyer un numéro d'erreur, et fais ton contrôle d'erreur sur ce $errno, 0 => tout va bien, 10060 => timeout, no response, les autres à voir ...
 
donc :  
[pseudocode]
serverOnline()
je tente silencieusement d'ouvrir un socket
si le socket a été ouvert, je le ferme, je renvoi 0
si le socket n'a pas été ouvert, J'ESSAYE PAS DE LE FERMER, et je renvoi $errno et/ou $errstr
 
boucle($ips)
pour toutes mes IPs, si serverOnline() est 0, c'est cool, sinon je sais avec $errno/$errstr pourquoi ça n'a pas fonctionné
[/pseudocode]

 
et peut-être qu'un set_time_limit ( nombre_vachement_grand_voir_zero ); vaudrait le coup, ou tu as p.e. un système de point de récup. en cas d'arrêt brutal de l'exe ...


 
yes, merci pour tes conseils!
 
j'ai tjs un problème de répétition... tous les serveur sont scannés 2x  :pt1cable:  alors qu'en local ils sont scannés qu'1x (ce qui est normal!). J'espère que tes conseils arrangeront tout ca  :jap:

n°1226743
shakpana
des fois, j'me demande ...
Posté le 19-10-2005 à 23:55:44  profilanswer
 

le_duc a écrit :

j'ai tjs un problème de répétition... tous les serveur sont scannés 2x  :pt1cable:  alors qu'en local ils sont scannés qu'1x

oui, c'est louche ...  
mais une fois que tu auras un contrôle d'erreur digne de ce nom, fais-toi une fonction de log, genre debugLog($data) qui stockera dans un fichier (à l'écran, ou ailleurs, m'en fout moi...) tout les évènements que tu juges interressant, ça devrait te permettre de voir à moment ça boucle ?! Parce que la question est "qu'est-ce qui boucle, où ça boucle, et qd ça boucle ?" Tout le tableau -> parsé 2 fois, chaque enregistrement un à un, chaque appel de serverOnline() ? ou ... ?


Message édité par shakpana le 19-10-2005 à 23:56:05
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Script qui tourne en boucle online et nickel en local... ???

 

Sujets relatifs
Une boucle pertiniente...utiliser un SID dans un script
[Script PHP] galerie photo LuxBum : demande d'avisrepeter un script sur une page
adresse MAC LOCALSoucis avec script JS pour copier:coller
boucle Do until....loop en VBAConseil vente de script php Annuaire
probleme script newsexécuter un script de migration de données entre bases SQL
Plus de sujets relatifs à : Script qui tourne en boucle online et nickel en local... ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR