From eb59cba1d351c257e79dc0f37454edde84cb6002 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Fri, 22 May 2009 15:28:30 +0000 Subject: [PATCH] lisibilite de la fonction 'chargement direct d'un fichier distant sur le disque dur', et verifier que le chemin fait plus de 5 caracteres, histoire de ne pas risquer de probleme avec une ecriture genre 'true' mais cette fonction meriterait une vraie API capable d'aller utiliser curl si present ; les devs de laconica se posent la meme question... --- ecrire/inc/distant.php | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index ad3c94184e..5219f261b3 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -155,15 +155,21 @@ function prepare_donnees_post($donnees, $boundary = '') { // et refuser_gz pour forcer le refus de la compression (cas des serveurs orthographiques) // date_verif, un timestamp unix pour arreter la recuperation si la page distante n'a pas ete modifiee depuis une date donnee // uri_referer, preciser un referer different -// si munge_charset est une chaine, alors c'est un nom de fichier -// dans lequel on ecrit directement la page +// Le second argument ($trans) : +// * si c'est une chaine longue, alors c'est un nom de fichier +// dans lequel on ecrit directement la page +// * si c'est true/null ca correspond a une demande d'encodage/charset // http://doc.spip.org/@recuperer_page -function recuperer_page($url, $munge_charset=false, $get_headers=false, +function recuperer_page($url, $trans=false, $get_headers=false, $taille_max = null, $datas='', $boundary='', $refuser_gz = false, $date_verif = '', $uri_referer = '') { $gz = false; + + // $copy = copier le fichier ? + $copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-) + if (is_null($taille_max)) - $taille_max = is_string($munge_charset)?_COPIE_LOCALE_MAX_SIZE:1048576; + $taille_max = $copy ? _COPIE_LOCALE_MAX_SIZE : 1048576; // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); @@ -182,7 +188,7 @@ function recuperer_page($url, $munge_charset=false, $get_headers=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); + $url = recuperer_lapage($url, $trans, $get, $taille_max, $datas, $boundary, $refuser_gz, $date_verif, $uri_referer); if (!$url) return false; if (is_array($url)) { list($headers, $result) = $url; @@ -198,11 +204,14 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, // http://doc.spip.org/@recuperer_lapage function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $datas='', $boundary='', $refuser_gz = false, $date_verif = '', $uri_referer = '') { - // si on ecrit directement dans un fichier, - // pour ne pas manipuler en memoire - // refuser gz - if (is_string($trans) AND $trans) + // $copy = copier le fichier ? + $copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-) + + // si on ecrit directement dans un fichier, pour ne pas manipuler + // en memoire refuser gz + if ($copy) $refuser_gz = true; + // ouvrir la connexion et envoyer la requete et ses en-tetes list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas); if (!$f) { @@ -231,7 +240,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, # spip_log("recup $headers" ); if ($trans === NULL) return array($headers, ''); - $result = recuperer_body($f, $taille_max,is_string($trans)?$trans:''); + $result = recuperer_body($f, $taille_max, $copy ? $trans : ''); fclose($f); if (!$result) return array($headers, $result); @@ -240,7 +249,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $result = spip_gzinflate_body($result); } // Faut-il l'importer dans notre charset local ? - if ($trans===true) { + if ($trans === true) { include_spip('inc/charsets'); $result = transcoder_page ($result, $headers); } -- GitLab