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

Fusion des fonctions spip_initialisation et spip_intialisation_parametree.

Suite à quelques essais (pas toujours réussis il est vrai) et échanges divers, l'installation de Spip, notamment en mutualisé, repose à présent sur les symboles suivants:

- plusieurs constantes _DIR_* au début de inc_version définissent les répertoires où se trouvent les sources, considérées comme inaccessibles en écriture car partageable par plusieurs sites.

- ensuite, plusieurs constantes _NOM_* définissent le nom (relatif) des fichiers et répertoires propres et indispensables à chaque site utilisant Spip, savoir 

	define('_NOM_CONFIG', 'mes_options');	
	define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/"); 
	define('_NOM_TEMPORAIRES_ACCESSIBLES', "var/");
	define('_NOM_PERMANENTS_INACCESSIBLES', "etc/");
	define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/");

	var/ comportant les images réduites créé dynamiquement
	tmp/ jouant le role d'ecrire/data  et comportant egalement CACHE/
	etc/ jouant le role de ecrire/ en tant que repertoire accessible en écriture.

- inc_version ne définit plus de fontions, mais charge immédiatement inc/utils qui à l'inverse ne fait que définir des fonctions.

- inc_version charge ensuite le fichier ecrire/mes_options.php (pour compatibilité) ou etc/mes_options (préférable aujourd'hui);

- enfin, il appelle la fonction d'initialisation ainsi:

	@spip_initialisation(
	       (_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES),
	       (_DIR_RACINE  . _NOM_PERMANENTS_ACCESSIBLES),
	       (_DIR_RACINE  . _NOM_TEMPORAIRES_INACCESSIBLES),
	       (_DIR_RACINE  . _NOM_TEMPORAIRES_ACCESSIBLES)
	       );

ce qui va définir les 4 répertoires accessibles en écriture à la racine du site, et initialiser toutes les autres constantes (notamment _SPIP_CHMOD).

- toutefois l'inclusion de mes_options peut neutraliser cet appel soit partiellement (en définissant quelques unes des constantes normalement définies par spip_initialisation qui ne pourra plus agir dessus) soit totalement (en appelant lui-meme spip_initialisation avec d'autres arguments que ceux ci-dessus).

Une application typique est de mettre dans ecrire/mes_options.php (ou etc/mes_otpions.php) les lignes suivantes:

define('_SPIP_CHMOD', 0770);

if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
	if (is_dir($e = _DIR_RACINE . 'Ajouts/' . $r[1]. '/')) {
		$cookie_prefix = $table_prefix = $r[1];
		define('_SPIP_PATH', 
			_DIR_RACINE . 'Ajouts/' . $table_prefix  . '/:' .
			_DIR_RACINE.':'.
			_DIR_RACINE .'dist/:' .
			_DIR_RESTREINT);

		spip_initialisation(
		       ($e . _NOM_PERMANENTS_INACCESSIBLES),
		       ($e . _NOM_PERMANENTS_ACCESSIBLES),
		       ($e . _NOM_TEMPORAIRES_INACCESSIBLES),
		       ($e . _NOM_TEMPORAIRES_ACCESSIBLES)
		       );

		if (is_readable($e .=  _NOM_CONFIG . '.php')) include($e);
	}
 }

La première ligne réduit l'accès aux répertoires et fichiers créés par le serveur http à ce seul serveur. 

A partir de l'URL du script appelé, les lignes suivantes déduisent un nom qui doit etre le nom d'un sous-répertoire Ajouts dans l'installation de Spip. L'exécution de ce script commence donc par déclarer les 4 sous-répertoires spécifiques au site, ainsi que le préfixe de ses table SQL. Au cas où existerait un fichier etc/mes_options pour ce site spécifique, celui est également chargé.

L'utilisation des constantes _NOM_* permet donc de disposer d'un ensemble de répertoires et fichiers qui n'ont meme pas à savoir s'ils utilisent une installation mutualisée ou non de Spip.

ATTENTION: il faut bien voir que les fonctions de inc/utils ne seront vraiment utilisables qu'après appel de spip_initialisation, car les constantes qu'elles utilisent (_DIR_TMP, _DIR_IMG etc) ne sont pas encore définies à l'entrée de mes_options (c'est justement ce qui permet de les personnaliser).
parent 138bf217
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -42,7 +42,7 @@ function action_purger_dist()
	break;

  case 'vignettes':
	purger_repertoire(_DIR_TMP_IMG, $age='ignore', $regexp = '^cache\-');
	purger_repertoire(_DIR_VAR, $age='ignore', $regexp = '^cache\-');
	spip_log('vider le cache');
	supprime_invalideurs();
	purger_repertoire(_DIR_CACHE, 0);
@@ -51,7 +51,7 @@ function action_purger_dist()
  case 'taille_vignettes':

  	global $lang;
	$handle = @opendir(_DIR_TMP_IMG);
	$handle = @opendir(_DIR_VAR);
	if (!$handle) return;

	$taille = 0;
@@ -59,8 +59,8 @@ function action_purger_dist()
		// Eviter ".", "..", ".htaccess", etc.
		if ($fichier[0] == '.') continue;
		if ($regexp AND !ereg($regexp, $fichier)) continue;
		if (is_dir(_DIR_TMP_IMG.$fichier) AND ereg("^cache-", $fichier)) {
			$taille += calculer_taille_dossier(_DIR_TMP_IMG.$fichier);
		if (is_dir($d = _DIR_VAR . $fichier) AND ereg("^cache-", $fichier)) {
			$taille += calculer_taille_dossier($d);
		}
	}
	closedir($handle);
@@ -70,7 +70,7 @@ function action_purger_dist()

	minipres('', "<div style='font-family: verdana, arial, sans; font-size: 12px;'>" .
 _T('ecrire:taille_cache_image',
		     array('dir' => _DIR_IMG,
		     array('dir' => _DIR_VAR,
			   'taille' => "<b>".taille_en_octets($taille)."</b>")) .'</div>'); 
	break;
  }
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -88,7 +88,7 @@ function action_tester_dist() {
			"pnmtojpeg", $pnmscale_command);

		$vignette = _ROOT_IMG_PACK."test.jpg";
		$dest = _DIR_TMP_IMG . "test-jpg.jpg";
		$dest = _DIR_VAR . "test-jpg.jpg";
		$commande = "$jpegtopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
		spip_log($commande);
		exec($commande);
@@ -98,7 +98,7 @@ function action_tester_dist() {
		$giftopnm_command = str_replace("pnmscale", "giftopnm", $pnmscale_command);
		$pnmtojpeg_command = str_replace("pnmscale", "pnmtojpeg", $pnmscale_command);
		$vignette = _ROOT_IMG_PACK."test.gif";
		$dest = _DIR_TMP_IMG . "test-gif.jpg";
		$dest = _DIR_VAR . "test-gif.jpg";
		$commande = "$giftopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
		spip_log($commande);
		exec($commande);
@@ -108,7 +108,7 @@ function action_tester_dist() {

		$pngtopnm_command = str_replace("pnmscale", "pngtopnm", $pnmscale_command);
		$vignette = _ROOT_IMG_PACK."test.png";
		$dest = _DIR_TMP_IMG . "test-gif.jpg";
		$dest = _DIR_VAR . "test-gif.jpg";
		$commande = "$pngtopnm_command $vignette | $pnmscale_command -width 10 | $pnmtojpeg_command > $dest";
		spip_log($commande);
		exec($commande);
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1589,7 +1589,7 @@ function direction_css ($css, $voulue='') {
		return $f;

	// 2.
	$f = sous_repertoire (_DIR_TMP_IMG, 'cache-css')
	$f = sous_repertoire (_DIR_VAR, 'cache-css')
		. preg_replace(',.*/(.*?)(_rtl)?\.css,', '\1', $css)
		. '.' . substr(md5($css), 0,4) . '_' . $ndir . '.css';

+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -43,7 +43,7 @@ function image_valeurs_trans($img, $effet, $forcer_format = false) {
	$nom_fichier = substr($fichier, 0, strlen($fichier) - 4);
	$fichier_dest = "$nom_fichier-$effet";
	$fichier_dest = md5($fichier_dest);
	$fichier_dest = sous_repertoire(_DIR_TMP_IMG, "cache-gd2") . $fichier_dest . "." .$terminaison_dest;
	$fichier_dest = sous_repertoire(_DIR_VAR, "cache-gd2") . $fichier_dest . "." .$terminaison_dest;
	
	$creer = true;
	if (@filemtime($fichier) < @filemtime($fichier_dest)) {
@@ -1623,7 +1623,7 @@ function produire_image_typo() {

	$string = "$text-$taille-$couleur-$align-$police-$largeur-$hauteur_ligne-$padding";
	$query = md5($string);
	$dossier = sous_repertoire(_DIR_TMP_IMG, 'cache-texte');
	$dossier = sous_repertoire(_DIR_VAR, 'cache-texte');
	$fichier = "$dossier$query.png";

	$flag_gd_typo = function_exists("imageftbbox")
+4 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -182,12 +182,12 @@ function sous_repertoire($base, $subdir, $nobase = false) {
	if ($f)
		fclose($f);
	else {
		spip_log("echec creation $base${subdir}_");
		spip_log("echec creation $base${subdir}");
		redirige_par_entete(
			generer_url_action('test_dirs',"test_dir=$base${subdir}_",true));
			generer_url_action('test_dirs',"test_dir=$base${subdir}",true));
	}
	spip_log("faux sous-repertoire $base${subdir}_");
	return "$baseaff${subdir}_";
	spip_log("faux sous-repertoire $base${subdir}");
	return "$baseaff${subdir}";
}
// compatibilite ascendante
// http://doc.spip.org/@creer_repertoire
Chargement en cours