Script qui tourne en boucle online et nickel en local... ??? - PHP - Programmation
Marsh Posté le 16-10-2005 à 21:16:52
Mmmm c'est pas toi qui a fait le script non?
Marsh Posté le 16-10-2005 à 21:21:51
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?
Marsh Posté le 16-10-2005 à 21:28:55
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
je suis pas sûr que ce soit la boucle en elle-même qui foire...
Marsh Posté le 16-10-2005 à 21:42:26
deja enleve l'effacement des warning peut etre que tu auras plus d'infos...
Marsh Posté le 16-10-2005 à 21:52:43
alors si je laisse les Warnings, j'ai ca:
Code :
|
ligne 175 = 1er fsockopen de la fonction ci-dessous!
la fonction qui émet les warning (au cas ou )
Code :
|
Marsh Posté le 17-10-2005 à 12:52:51
c'est ca qui merde :
Code :
|
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....???!!!!
Marsh Posté le 17-10-2005 à 12:59:53
// on enlève les warnings...car sinon ca emmerde :-S |
P'tain y'a des fois...
Marsh Posté le 17-10-2005 à 14:40:47
en fait faut que je mette la ligne suivante sinon ca tourne en boucle :
Code :
|
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!
Marsh Posté le 17-10-2005 à 14:45:41
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
Marsh Posté le 17-10-2005 à 15:10:54
t'aurais un exemple ou doc pour faire les trucs que tu dis?
pasque moi à part les try-catch, je connais rien
thx, @++
Marsh Posté le 17-10-2005 à 15:24:24
ahhhh donc qd on met un "@" devant une fonction, ca bloque les erreurs ?
c cool ca
Marsh Posté le 17-10-2005 à 15:27:27
Ouais enfin ça veut pas dire qu'il faut en mettre partout C'est à utiliser que dans certains cas particuliers...
Marsh Posté le 17-10-2005 à 18:00:02
bon c'est quand même trop trop trop bizarre cette histoire!!!
Voilà le script avec les fsockopen():
Code :
|
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()!)
:?:
Marsh Posté le 17-10-2005 à 18:03:15
Salut,
réduit le temps alloué avant que ta fonction retourne une erreur :
http://fr.php.net/manual/fr/functi [...] imeout.php
Marsh Posté le 17-10-2005 à 18:09:16
anthomicro a écrit : Salut, |
en ajoutant cette ligne juste après les 2 ligne de fsockopen(), ca me fait encore plus de warnings....
Code :
|
Marsh Posté le 18-10-2005 à 12:15:59
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 ...
Marsh Posté le 19-10-2005 à 20:49:14
shakpana a écrit : alors juste 2 trucs: |
yes, merci pour tes conseils!
j'ai tjs un problème de répétition... tous les serveur sont scannés 2x alors qu'en local ils sont scannés qu'1x (ce qui est normal!). J'espère que tes conseils arrangeront tout ca
Marsh Posté le 19-10-2005 à 23:55:44
le_duc a écrit : j'ai tjs un problème de répétition... tous les serveur sont scannés 2x 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 ... ?
Marsh Posté le 16-10-2005 à 20:47:29
Yop yop
Je comprends plus rien... j'ai un script PHP qui tourne nickel en local avec easyPHP, mais online, il tourne en boucle!!!
En local (easyPHP): PHP4.x
Online: PHP5
Voilà le script:
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