[Qst] - fopen, fsockopen et leurs copains...

Eléphant du PHP | 103 Messages

09 janv. 2009, 01:09

Salutations,

J'ai un problème que je n'arrive pas à résoudre...

Je suis en train de concevoir une page qui sert de check-up de l'état de notre serveur privé (FTP & WWW), qui à de nombreuses données croisées chez notre hébergeur, et vice versa...

Autant "ftp_connect" marche à merveille, autant "fopen" ne donne pas le résultat escompté... J'ai même essayé comme vous le verrez dans les commentaires avec "fsockopen", qui lui marche bien, mais génère des erreurs immondes si off-line, que je n'arrive pas à virer...

Voici le code complet :

Code : Tout sélectionner

<!-- Partie incluse par le fichier intraserv.php !--> <? $ftp = 'ftp://'; //préfixe FTP $web = 'http://'; //préfixe Web $adresse = 'www.wda-fr.org'; //url externe du serveur $portftp = '21'; //port du serveur FTP //$portweb = '80'; //port du serveur web $cnxftp = ftp_connect($adresse, $portftp, 1); //ouverture de l'acces FTP $assosweb = $web.$adresse; //association de l'acces web //echo $assosweb; $cnxweb = @fopen($assosweb, 'a'); //$cnxweb = fsockopen($adresse, $portweb, &$errno, &$errstr, 1); //ouverture de l'acces Web ?> <br /> <table class="liaisonintra" width="600" bgcolor="#FFFFFF"> <tr> <td align="center" colspan="2">Serveur privé dans les locaux de l'<a href="http://www.wda-fr.org" target="_blank">association <b>WDA</b></a>.</td> </tr> <tr valign="top"> <td align="left" width="110"> Etat du <a href="<? echo $ftp.$adresse.':'.$portftp ?>" target="_blank">serveur FTP</a> :&nbsp; <? if (!$cnxftp) { echo '<img src="pict/rouge.gif" alt="Serveur Off-line" title="Serveur Off-line" />'; } else { echo '<img src="pict/vert.gif" alt="Serveur On-line" title="Serveur On-line" />'; } ?> </td> <td align="justify"> <? if (!$cnxftp) { echo 'La <a href="http://drivers.wda-fr.org" target="_blank">base de pilotes matériels</a> & <a href="http://softs.wda-fr.org" target="_blank">les sélections de logiciels libres</a> proposés par <a href="http://www.wda-fr.org" target=_"blank">l\'association <b>WDA</b></a> doivent être <font color="#FF0000">inaccessibles</font>. Veuillez nous excuser de la gène occasionnée, et retenter ultérieurement...'; } else { echo 'La <a href="http://drivers.wda-fr.org" target="_blank">base de pilotes matériels</a> & <a href="http://softs.wda-fr.org" target="_blank">les sélections de logiciels libres</a> proposés par <a href="http://www.wda-fr.org" target=_"blank">l\'association <b>WDA</b></a> doivent être <font color="#009900">accessibles</font> sans soucis. Néanmoins, si vous rencontrez un problème, <a href="http://contact.wda-fr.org" target="_blank">faites le nous savoir</a>.'; } ?> </td> </tr> <tr valign="top"> <td align="left" width="110"> Etat du <a href="<? echo $web.$adresse.':'.$portweb ?>" target="_blank">serveur Web</a> :&nbsp; <? if (!$cnxweb) { echo '<img src="pict/rouge.gif" alt="Serveur Off-line" title="Serveur Off-line" />'; } else { echo '<img src="pict/vert.gif" alt="Serveur On-line" title="Serveur On-line" />'; } ?> </td> <td align="justify"> <? if (!$cnxweb) { echo 'le <a href="'.$web.$adresse.'" target="_blank">serveur web privé</a> de <a href="http://www.wda-fr.org" target=_"blank">l\'association <b>WDA</b></a> et les photos hautes definitions de <a href="http://musee.wda-fr.org" target="_blank">notre collection</a> doivent être <font color="#FF0000">inaccessibles</font>. Veuillez nous excuser de la gène occasionnée, et retenter ultérieurement...'; } else { echo 'le <a href="'.$web.$adresse.'" target="_blank">serveur web privé</a> de <a href="http://www.wda-fr.org" target=_"blank">l\'association <b>WDA</b></a> et les photos hautes definitions de <a href="http://musee.wda-fr.org" target="_blank">notre collection</a> doivent être <font color="#009900">accessibles</font> sans soucis. Néanmoins, si vous rencontrez un problème, <a href="http://contact.wda-fr.org" target="_blank">faites le nous savoir</a>.'; } ?> </td> </tr> </table> <br /> <? // Fermeture de la connexion //fclose($cnxweb); ftp_close($cnxftp); clearstatcache(); ?> <!-- Fin de partie incluse par le fichier intraserv.php !-->
Cette page est dédiée à être appelée via php include dans d'autres pages...

Dernier détail, nous sommes hébergés chez 1and1 (php4 et 5 dispo.)

Si vous avez des idées...

Eléphant du PHP | 103 Messages

19 janv. 2009, 19:23

Un petit up ? ;-)
Je reste bien embêté... :-(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 janv. 2009, 02:03

Le "@" devant le nom d'une fonction permet de masquer les "erreurs immondes si off-line".
Donc si tu veux savoir pourquoi fopen ne marche pas, retire le @ pour connaitre le message d'erreur.
Et à l'inverse si tu veux masquer les erreurs de fsockopen quand il n'arrive pas à se connecter, ajoute un @ devant ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 103 Messages

20 janv. 2009, 17:35

Le "@" devant le nom d'une fonction permet de masquer les "erreurs immondes si off-line".
Donc si tu veux savoir pourquoi fopen ne marche pas, retire le @ pour connaitre le message d'erreur.
Et à l'inverse si tu veux masquer les erreurs de fsockopen quand il n'arrive pas à se connecter, ajoute un @ devant ;)
YES, ça marche... Merci ;-)
Par contre, j'ai du remplacer "fopen" par "fsockopen"... Sinon, ça ne marchait pas.

Question bonus :

Code : Tout sélectionner

(...) $cnxweb = @fsockopen($adresse, $portweb, &$errno, &$errstr, 1); //ouverture de l'acces Web (...)
Je ne comprend pas très bien le paramétrage de "$errno" et "$errstr"...

Eléphant du PHP | 103 Messages

23 janv. 2009, 22:26

(...)
Je ne comprend pas très bien le paramétrage de "$errno" et "$errstr"...
Any idea ?

Mammouth du PHP | 991 Messages

23 janv. 2009, 23:06

errno

Si fourni, contient le numéro de l'erreur système qui survient lors de l'appel système à connect().

Si la valeur retournée par errno est 0 et que la fonction retourne FALSE, ce peut être une indication laissant penser que l'erreur est survenue avant l'appel à connect(). La plupart du temps, cela est du à un problème d'initialisation du socket.

errstr

Le message d'erreur, sous la forme d'une chaîne de caractères.


Source : http://fr.php.net/manual/fr/function.fsockopen.php
DevOps, Symfony4, Hoa

ViPHP
ViPHP | 4674 Messages

24 janv. 2009, 02:23

Hey :),

Au passage ton code est obsolète. On préfère utiliser <?php plutôt que <?. On ne précise plus le passage en référence lors de l'appel de fonction (maFonction(&$var)) car la référence sera automatiquement donnée selon la déclaration de la fonction.
Donc pour $errno et $errstr, elles seront automatiquement remplies pas la fonction. Ce sont des variables d'entrée/sortie (je n'aime pas ce terme, mais ça parle souvent au débutant).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 103 Messages

18 févr. 2009, 23:22

Merci à tous, je vais potasser ça... :)