Page 1 sur 1

[PHP] - Reduire le timeout d'un fopen...

Posté : 23 oct. 2008, 20:59
par casio
Salutations,

Soit le code suivant :

Code : Tout sélectionner

<?php $fichdons = "http://serveurenquestion/dons.txt"; /* nom du fichier TXT */ $fpdons = fopen($fichdons, 'r'); /* Ouverture du fichier en lecture */ $ic = 0; $ic_max = 10; /* Maximum de lignes lues */ if (!$fpdons) { echo "<br><br>L'ouverture du fichier $fichdons n'a pas réussi.<br>"; echo "Le serveur semble inaccessible.<br>"; exit; } else ?> <div align="center"><table width="600" border="0" bgcolor="#FFFFFF" cellpadding="3" background="pict/Cadre2-fond.gif"> <tr> <td align="left" style="border:1px dashed Black;"> <?php while (!feof($fpdons) && ++$ic<=$ic_max) { $ligne = fgets($fpdons, 100); /* lecture des 100 premiers caractères */ $ligne = str_replace("'"," ", $ligne); /* Remplacement des caractères */ echo "$ligne"; /* Affichage de la ligne */ // En reste t'il encore ? $apu = substr($ligne, 0, 8); // Suppression des tirets de debut $tirets = str_replace("- ", "", $ligne); // Boucle pour l'affichage en lien avec image if ($apu=="- (parti") echo "<br>"; else echo "&nbsp;(<a href='&#109&#97&#105&#108&#116&#111&#58&#119&#100&#97&#64&#119&#100&#97&#45&#102&#114&#46&#111&#114&#103?subject=[Don] - Requête&body=Bonjour, Je serais intéressé par : ".$tirets."'>Ecrivez-nous</a>)<br>"; /* Saut à chaque ligne */ } ?> </td> </tr> </table> <table width="600" border="0" cellpadding="0"> <!-- <tr> <td><div align="right"><?php echo "(MaJ : " . date("d/m/Y", filectime($fichdons)) . ")"; ?></div></td> </tr> !--> </table></div> <?php fclose($fpdons); /* Fermeture du fichier */ ?>
Si le fichier dons.txt (fopen) est inaccessible (ce qui est le cas actuellement puisque hébergé sur une serveur privé), le timeout bloque le chargement du reste du site 3 plombes... :(

Any idea ?

Posté : 23 oct. 2008, 21:52
par damaskinos
Bonjour
Je te conseillerais de toujours vérifier d'abord si le fichier existe. je crois que depuis php5.0 file_exists supporte le protocole http. Ensuite vérifie la permission du fichier avant de faire ton fopen avec is_readable, je crois qu'il supporte aussi le protocle http depuis php 5.0.

J'espere que ça t'aidera.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 24 oct. 2008, 00:56
par casio
Bonjour
Je te conseillerais de toujours vérifier d'abord si le fichier existe. je crois que depuis php5.0 file_exists supporte le protocole http. Ensuite vérifie la permission du fichier avant de faire ton fopen avec is_readable, je crois qu'il supporte aussi le protocle http depuis php 5.0.

J'espere que ça t'aidera.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Bon, j'ai testé, mais ça me donne toujours le même résultat : "L'ouverture du fichier http://monserveur/dons.txt n'a pas réussi.", alors que j'ai testé avec des fichiers existants...

Code : Tout sélectionner

<?php clearstatcache(); $fichdons = 'http://monserveur/dons.txt'; /* nom du fichier TXT */ if (!is_file($fichdons)) { echo "<br>L'ouverture du fichier $fichdons n'a pas réussi.<br>"; } else { $fpdons = fopen($fichdons, 'r'); /* Ouverture du fichier en lecture */ $ic = 0; $ic_max = 10; /* Maximum de lignes lues */ echo "<div align='center'><table width='600' border='0' bgcolor='#FFFFFF' cellpadding='3' background='pict/Cadre2-fond.gif'> <tr> <td align='left' style='border:1px dashed Black;'>"; while (!feof($fpdons) && ++$ic<=$ic_max) { $ligne = fgets($fpdons, 100); /* lecture des 100 premiers caractères */ $ligne = str_replace("'"," ", $ligne); /* Remplacement des caractères */ echo "$ligne"; /* Affichage de la ligne */ // En reste t'il encore ? $apu = substr($ligne, 0, 8); // Suppression des tirets de debut $tirets = str_replace("- ", "", $ligne); // Boucle pour l'affichage en lien avec image if ($apu=="- (parti") echo "<br>"; else echo "&nbsp;(<a href='&#109&#97&#105&#108&#116&#111&#58&#119&#100&#97&#64&#119&#100&#97&#45&#102&#114&#46&#111&#114&#103?subject=[Don] - Requete&body=Bonjour, Je serais interesse par : ".$tirets."'>Ecrivez-nous</a>)<br>"; /* Saut à chaque ligne */ echo "</td> </tr>";} echo "</table> <table width='600' border='0' cellpadding='0'> <tr> <td><div align='right'>(MaJ : " . date("d/m/Y", filectime($fichdons)) . ")</div></td> </tr> </table></div>"; fclose($fpdons); /* Fermeture du fichier */ } ?>

Posté : 24 oct. 2008, 19:19
par damaskinos
Salut,

Bon c'est quoi la version de ton php. Pour que is_file accepte comme paramètre une URL il faut que tu es au moins la version 5.0.0.

Sinon en plus de verifier si le fichier existe tu devrais verifierz aussi s'il est lisible avec is_readable par contre la aussi il faut php 5.0.0 minimun.
Ensuite vérifie la permission du fichier avant de faire ton fopen avec is_readable, je crois qu'il supporte aussi le protocle http depuis php 5.0.0
. Tu pourrais l'ajouter dans ton if comme suit

if (!is_file($fichdons) && !is_readable($fichdons)) {

   echo "<br>L'ouverture du fichier $fichdons n'a pas réussi.<br>";

} else {

   $fpdons = fopen($fichdons, 'r'); /* Ouverture du fichier en lecture */ 

Reviens moi si ca bloque encore

Posté : 29 oct. 2008, 14:52
par casio
Salutations,

Mais déjà si is_file ne semble pas donner satisfaction, je ne vais pas rajouter is_readable.... si ?