Valider a956000c rédigé par esj's avatar esj
Parcourir les fichiers

L'option de recuperer_page donnant une date de mise à jour ne produisait pas...

L'option de recuperer_page donnant une date de mise à jour ne produisait pas l'en-tête HTTP {{{If-Modified-Since}}}, c'était dispendieux. Cette option est à présent disponible aussi au niveau de {{{copie_locale}}} quand on lui donne un 2e argument égal à {{{modif}}}. 

Du coup, la fonction signalant de nouvelles versions de SPIP peut facilement mettre en cache leur liste, pas besoin d'une meta comme j'avais pensé un moment.

Il semble cependant que le fichier {{{http://files.spip.org/spip/archives.xml}}} soit réécrit très souvent même si son contenu ne change pas. N'y aurait-il pas moyen d'éviter ça ?
parent 4779bb62
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+19 −17
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,6 +21,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// Cree au besoin la copie locale d'un fichier distant
// mode = 'test' - ne faire que tester
// mode = 'auto' - charger au besoin
// mode = 'modif' - Si deja present, ne charger que si If-Modified-Since
// mode = 'force' - charger toujours (mettre a jour)
//
// Prend en argument un chemin relatif au rep racine, ou une URL
@@ -36,24 +37,25 @@ function copie_locale($source, $mode='auto') {
	if (preg_match($reg, $source, $local)) return substr(_DIR_IMG,strlen(_DIR_RACINE)) . urldecode($local[1]);

	$local = fichier_copie_locale($source);
	$localrac = _DIR_RACINE.$local;
	$t = ($mode=='force') ? false  : @file_exists($localrac);

	// test d'existence du fichier
	if ($mode == 'test')
		return @file_exists(_DIR_RACINE.$local) ? $local : '';
	if ($mode == 'test') return $t ? $local : '';

	// si $local = '' c'est un fichier refuse par fichier_copie_locale(),
	// par exemple un fichier qui ne figure pas dans nos documents ;
	// dans ce cas on n'essaie pas de le telecharger pour ensuite echouer
	if (!$local) return false;

	// sinon voir si on doit le telecharger
	if ($local != $source
	AND preg_match(',^\w+://,', $source)) {
		if (($mode=='auto' AND !@file_exists(_DIR_RACINE.$local))
		OR $mode=='force') {
			$res = recuperer_page($source,_DIR_RACINE.$local,false,_COPIE_LOCALE_MAX_SIZE);
			if (!$res) return false;
			spip_log ('ecrire copie locale '._DIR_RACINE.$local." taille $res");
	// sinon voir si on doit/peut le telecharger
	if ($local == $source OR !preg_match(',^\w+://,', $source)) 
		return $local;

	if ($mode=='modif' OR !$t) {
		$res = recuperer_page($source, $localrac,false,_COPIE_LOCALE_MAX_SIZE, '','',false, $t ? filemtime($localrac) : '');
		if (!$res) return $t ? $local : false;
#		spip_log ('ecrire copie locale '.$localrac." taille $res");
			
		// pour une eventuelle indexation
		pipeline('post_edition',
@@ -67,7 +69,6 @@ function copie_locale($source, $mode='auto') {
				)
			);
	}
	}

	return $local;
}
@@ -218,7 +219,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576,
		$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, _INC_DISTANT_VERSION_HTTP);
	list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas, _INC_DISTANT_VERSION_HTTP, $date_verif);
	if (!$f) {
		spip_log("ECHEC init_http $url");
		return false;
@@ -548,7 +549,7 @@ function need_proxy($host)
// retourne le descripteur sur lequel lire la reponse
//
// http://doc.spip.org/@init_http
function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0") {
function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {
	$user = $via_proxy = $proxy_user = ''; 
	$fopen = false;

@@ -570,7 +571,7 @@ function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $v
	if (!isset($t['path']) || !($path = $t['path'])) $path = "/";
	if (@$t['query']) $path .= "?" .$t['query'];

	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers);
	$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
	if (!$f) {
	  // fallback : fopen
		if (!$GLOBALS['tester_proxy']) {
@@ -584,7 +585,7 @@ function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $v
}

// http://doc.spip.org/@lance_requete
function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0") {
function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {

	$proxy_user = '';
	$http_proxy = need_proxy($host);
@@ -612,6 +613,7 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
	. "User-Agent: " . _INC_DISTANT_USER_AGENT . "\r\n"
	. ($refuse_gz ? '' : ("Accept-Encoding: " . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
	. (!$site ? '' : "Referer: $site/$referer\r\n")
	. (!$date ? '' : "If-Modified-Since: " . (gmdate("D, d M Y H:i:s", $date)  ." GMT\r\n"))
	. (!$user ? '' : ("Authorization: Basic " . base64_encode($user) ."\r\n"))
	. (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
	. (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -410,8 +410,8 @@ function info_maj ()
#	list($maj,$min,$rev) = preg_split('/\D+/', '1.9.2i'); # pour test
	include_spip('inc/distant');
	$liste = _VERSIONS_SERVEUR . _VERSIONS_LISTE;
	if (!$page = recuperer_page($liste)) return '';

	if (!$page = copie_locale($liste, 'modif')) return '';
	$page = file_get_contents(_DIR_RACINE . $page);
	// reperer toutes les versions de numero majeur superieur ou egal
	// (a revoir quand on arrivera a SPIP V10 ...)
	$p = substr("0123456789", intval($maj));