From 8aa13f978cb1febaec86b8dc99b4b73731a8d196 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 12 Apr 2008 17:34:55 +0000 Subject: [PATCH] Suite de [11441]: ne pas fermer la connexion dans la fonction recuperer_entetes en cas de status <> 200: la persistence peut rester utilie. --- ecrire/inc/distant.php | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index b12a3e2721..6adde55f9f 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -205,12 +205,15 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $headers = ''; else { $headers = recuperer_entetes($f, $date_verif); - if (!$headers) { - spip_log("ECHEC chargement $url"); + if (is_numeric($headers)) { + spip_log("HTTP status $headers pour $url"); + fclose($f); return false; } - if (!is_array($headers)) + if (!is_array($headers)) { + fclose($f); return $headers ; // cas Location ou Modified. + } $headers = join('', $headers); } @@ -241,20 +244,19 @@ function recuperer_body($f, $taille_max=1048576) return $result; } -// Entetes de reponse HTTP sur la socket $f -// Les retourne sous forme de tableau, -// sauf si presence de Location ou Last-Modified, -// ou on renvoie une chaine et on ferme la connexion +// Lit les entetes de reponse HTTP sur la socket $f et retourne: +// la valeur (chaine) de l'en-tete Location si on l'a trouvee +// la valeur (numerique) du statut si different de 200, notamment Not-Modified +// le tableau des entetes dans tous les autres cas function recuperer_entetes($f, $date_verif='') { $s = @trim(fgets($f, 16384)); if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) { - @fclose($f); - return false; + return 0; } - $status = $r[1]; + $status = intval($r[1]); $headers = array(); while ($s = trim(fgets($f, 16384))) { $headers[]= $s."\n"; @@ -266,18 +268,14 @@ function recuperer_entetes($f, $date_verif='') if(strtotime($date_verif)>=strtotime($r[1])) { //Cas ou la page distante n'a pas bouge depuis //la derniere visite - fclose($f); return $status; } } } if ($status >= 300 AND $status < 400 AND $location) { - fclose($f); return $location; } else if ($status != 200){ - spip_log("ECHEC chargement $url : Status $status"); - @fclose($f); - return false; + return $status; } return $headers; } -- GitLab