fopen qui ne se ferme pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fopen qui ne se ferme pas

Toujours sur clearstatcache

par daplus » 08 janv. 2007, 16:26

include "include/get_root_da.inc";

$result = mysql_query ("SELECT * FROM w_url ORDER BY wid LIMIT 0,50",$db);


while ($myrow = mysql_fetch_array($result)) {

$url = $myrow["url"];
$wid = $myrow["wid"];

if ( file_exists('$url') ){ $v_comm ='OK'; } else { $v_comm = 'NO'; }

 echo "<a href=\"$url\" target=_blank>wid $wid</a> v_comm $v_comm<br>";

     $sqlup = "UPDATE w_url SET check_url = '$v_comm' WHERE wid=$wid";

    $resultup = mysql_query($sqlup);

clearstatcache();
Ne marche pas plus

Merci pour votre temps

Merci à Ryle

par daplus » 08 janv. 2007, 16:19

J'ai fait
if ( file_exists('$url')){ $v_comm='OK'; } else { $v_comm = 'NO'; }

 echo "<a href=\"$url\" target=_blank>wid $wid</a> v_comm $v_comm<br>";

     $sqlup = "UPDATE w_url SET check_url = '$v_comm' WHERE wid=$wid";

    $resultup = mysql_query($sqlup);

}
cela marche très vite, j'ai juste un problème pour reécupérer la valeur:

cela fait tout le temps v_comm = NO

Dois-je utiliser
clearstatcache()
si oui comment?

Merci de ton temps

Merci Ajoloca

par daplus » 08 janv. 2007, 16:07

J'ai effectué la modification
include "include/get_root_da.inc";

$result = mysql_query ("SELECT * FROM w_url ORDER BY wid LIMIT 0,50",$db);


while ($myrow = mysql_fetch_array($result)) {

$url = $myrow["url"];
$wid = $myrow["wid"];

$fh = fopen("$url", "r");

if ( $fh ) {$v_comm='OK'; } else { $v_comm = 'NO'; }

fclose($fh);

 echo "<a href=\"$url\" target=_blank>wid $wid</a> v_comm $v_comm<br>";

     $sqlup = "UPDATE w_url SET check_url = '$v_comm' WHERE wid=$wid";

    $resultup = mysql_query($sqlup);
ensuite sur ma machine j'ai changé le temps de 30 à 60 sec.

J'ai rebooté ma machine


J'ai toujours les messages d'erreur suivant:

Warning: fopen(): php_network_getaddresses: gethostbyname failed in ...\batch_url_html.php on line 22

Warning: fopen(http://www.kreller.de): failed to open stream: No such file or directory in ..\batch_url_html.php on line 22

Warning: fclose(): supplied argument is not a valid stream resource in ...\batch_url_html.php on line 26

Fatal error: Maximum execution time of 30 seconds exceeded in ...\batch_url_html.php on line 22

Cela me donne une première réponse, à savoir que le php.ini à changer est celui du serveur, auquel je n'ai pas accès. Je n'ai pas de serveur web à moi, ou en colocation.

Si je fais un phpinfo sur le serveur, j'obtiens:

- allow_url_fopen On On
- max_execution_time 30 30

Merci pour ton temps

par Ryle » 08 janv. 2007, 10:34

Tu trouveras également pas mal d'exemples et de suggestions pour tester une url dans les commentaires postés sur la doc de la fonction file_exists()

par Ajoloca » 08 janv. 2007, 08:12

Bonjour,

Concernant la fermeture de ton File descriptor, c'est normal qu'il ne se ferme pas.
Tu ne le demandes pas.

Concernant le message d'erreur, c'est le temps maximum qui est imparti à un script PHP pour l'exécution.

Quand tu as une URL qui ne répond pas, le script lui continue à tourner et les 30 secondes sont atteintes, d'où ton message.

Pour fermer ton File Descriptor, avant l'accolade de fermeture du while
fclose($fh);
Pour augmenter le temps d'exécution d'un script, dans ton fichier php.ini, modifie la valeur de la directive max_execution_time.
N'oublie pas de redémarre ton serveur WEB après la modification.

fopen qui ne se ferme pas

par daplus » 08 janv. 2007, 07:52

Bonjour à tous et à toutes,

J'ai 2800 URL dans une bdd et je veux lire s'ils sont encore fonctionnel,

j'ai fait un script:
include "include/get_root_da.inc";

$result = mysql_query ("SELECT * FROM w_url ORDER BY wid LIMIT 0,50",$db);


while ($myrow = mysql_fetch_array($result)) {

$url = $myrow["url"];
$wid = $myrow["wid"];

$fh = fopen("$url", "r");

if ( $fh ) {$v_comm='OK'; } else { $v_comm = 'NO'; }


 echo "<a href=\"$url\" target=_blank>wid $wid</a> v_comm $v_comm<br>";

     $sqlup = "UPDATE w_url SET check_url = '$v_comm' WHERE wid=$wid";

    $resultup = mysql_query($sqlup);

}
Le problème est que quand le URL ne marche pas, le fopen ne se ferme pas et j'obtiens

Fatal error: Maximum execution time of 30 seconds exceeded in ....

J'avais de l'espoir avec
checkdnsrr($mailDomain, "MX");
mais j'ai lu que cela ne marchait pas sur les serveurs Windows,

J'ai aussi essayé file_get_contents
qui ouvre tout le fichier mais ce n'est pas ce que je cherche

Je cherche une commande courte qui me dit si mon URL est fonctionnel ou non.

Plus tard quand j'aurais trié les URL je regarderais les meta-description.

Merci de votre aide