diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php index 815e9c15522119d0a95da414dc5eb2d30ecdd1e3..b60bfa54488f1e45ad3201e50be82b5dfa5b2938 100644 --- a/ecrire/action/editer_site.php +++ b/ecrire/action/editer_site.php @@ -55,8 +55,8 @@ function action_editer_site_dist() { } } // Envoi depuis le formulaire d'analyse automatique d'un site - else if (strlen(vider_url(_request('url_auto')))) { - if ($auto = analyser_site(_request('url_auto'))) { + else if (strlen(vider_url($u = _request('url_auto')))) { + if ($auto = analyser_site($u)) { $id_syndic = insert_syndic(_request('id_parent')); revisions_sites($id_syndic, $auto); if ($auto['syndication'] == 'oui') @@ -90,10 +90,11 @@ function action_editer_site_dist() { $chercher_logo = charger_fonction('chercher_logo', 'inc'); if (!$logo = $chercher_logo($id_syndic, 'id_syndic', 'on') OR !$t) { - $auto = analyser_site(_request('url_syndic')); - revisions_sites($id_syndic, - array('descriptif' => $auto['descriptif']) - ); + if ($auto = vider_url(_request('url_auto'))) { + $auto = analyser_site($auto); + revisions_sites($id_syndic, + array('descriptif' => $auto['descriptif'])); + } if (!$logo AND $auto['logo'] AND $auto['format_logo']) @rename($auto['logo'], diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index 594d2bd5d932a79a6e9c70f3fcb7df8e415aa652..d663322be216c82e778ee09a9fe779c1e6465e3d 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -141,7 +141,7 @@ function prepare_donnees_post($donnees, $boundary = '') { // et au besoin l'encode dans le charset local // // options : get_headers si on veut recuperer les entetes -// taille_max : arreter le contenu au-dela (0 = seulement les entetes) +// taille_max : arreter le contenu au-dela (0 = seulement les entetes ==>HEAD) // Par defaut taille_max = 1Mo. // datas, une chaine ou un tableau pour faire un POST de donnees // boundary, pour forcer l'envoi par cette methode @@ -153,7 +153,6 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_max = 1048576, $datas='', $boundary='', $refuser_gz = false, $date_verif = '', $uri_referer = '') { $gz = false; - // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url; @@ -165,20 +164,35 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, if (!empty($datas)) { $get = 'POST'; - list($content_type, $postdata) = prepare_donnees_post($datas); + $datas = prepare_donnees_post($datas); } - for ($i=0;$i<10;$i++) { // dix tentatives maximum en cas d'entetes 301... - list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer); - $gz = false; + // dix tentatives maximum en cas d'entetes 301... + for ($i=0;$i<10;$i++) { + $url = recuperer_lapage($url, $munge_charset, $get, $taille_max, $datas, $boundary, $refuser_gz, $date_verif, $uri_referer); + if (!$url) return false; + if (is_array($url)) { + list($headers, $result) = $url; + return ($get_headers ? $headers."\n" : '').$result; + } + } +} + +// args comme ci-dessus (presque) +// retourne l'URL en cas de 301, un tableau (entete, corps) si ok, false sinon - // si on a utilise fopen() - passer a la suite - if ($fopen) { +function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $datas='', $boundary='', $refuser_gz = false, $date_verif = '', $uri_referer = '') +{ + list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer); + $gz = false; + + // si on a utilise fopen() - passer a la suite + if ($fopen) { spip_log('connexion via fopen'); - break; - } else { + } else { // Fin des entetes envoyees par SPIP if($get == 'POST') { + list($content_type, $postdata) = $datas; @fputs($f, $content_type); @fputs($f, 'Content-Length: '.strlen($postdata)."\r\n"); @fputs($f, "\r\n".$postdata); @@ -191,7 +205,7 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, if (preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) { $status = $r[1]; } - else return; + else return false; // Entetes HTTP de la page $headers = ''; @@ -200,7 +214,6 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, if (preg_match(',^Location: (.*),i', $s, $r)) { include_spip('inc/filtres'); $location = suivre_lien($url, $r[1]); - spip_log("Location: $location"); } if ($date_verif AND preg_match(',^Last-Modified: (.*),', $s, $r)) { if(strtotime($date_verif)>=strtotime($r[1])) { @@ -212,23 +225,21 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, if (preg_match(",^Content-Encoding: .*gzip,i", $s)) $gz = true; } - if ($status >= 300 AND $status < 400 AND $location) - $url = $location; - else if ($status != 200) + if ($status >= 300 AND $status < 400 AND $location) { + fclose($f); + return $location; + } else if ($status != 200) return false; - else - break; # ici on est content - fclose($f); - $f = false; + ; # sinon on est content } - } - + // Contenu de la page if (!$f) { spip_log("ECHEC chargement $url"); return false; } + if ($trans === NULL) return array($headers, ''); $result = ''; while (!feof($f) AND strlen($result)<$taille_max) $result .= fread($f, 16384); @@ -239,12 +250,12 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $result = gzinflate(substr($result,10)); // Faut-il l'importer dans notre charset local ? - if ($munge_charset) { + if ($trans) { include_spip('inc/charsets'); $result = transcoder_page ($result, $headers); } - return ($get_headers ? $headers."\n" : '').$result; + return array($headers, $result); }