SPIP permet compartir els seus fitxers a partir d’SPIP 1.9. Al llarg de les versions els procediments es clarifiquen i esdevenen més sòlids [1].
El concepte...
A partir d’SPIP 1.9.2 les carpetes necessàries pel funcionament del nucli SPIP (ecrire, prive, dist (convertits en squelettes-dist a la versió 2.0)), i aquells que marquen l’activitat d’un lloc (config, IMG, tmp, local) són clarament identificables i separats [2]. És aquesta separació la que permet tenir diversos llocs SPIP autònoms en un mateix nucli d’SPIP.
Aquesta autonomia reposa damunt de quatre directoris per lloc en els quals SPIP escriurà les dades que resultin de l’activitat del lloc. D’una banda, distingeix les dades temporals i les permanents, i, per l’altra, les dades accessible per HTTP de les que no ho són. Els dos directoris inaccessibles per HTTP es protegiran amb un .htaccess instal·lat automàticament per SPIP (els administradors del servidor poder posar aquests directoris a fora de l’arborescència servida per HTTP).
Aquests quatre directoris són diferents i nomenats per les següents constants PHP:
define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/");
define('_NOM_TEMPORAIRES_ACCESSIBLES', "local/");
define('_NOM_PERMANENTS_INACCESSIBLES', "config/");
define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/");
En una instal·lació simple d’SPIP, aquests directoris es creen a l’arrel del lloc amb els valors per defecte de més amunt. La compartició dels recursos d’SPIP reposa damunt de l’associació de quatre directoris específics a cada lloc, deduïts dels seus URL.
Inicialització de la compartició
Aquesta associació s’efectua per una funció,
spip_initialisation
. Admet quatre arguments que indiquen la localització dels quatre directoris fonamentals, i construeix a partir d’aquests les constants que serveixen al funcionament d’SPIP.
En una instal·lació simple, aquests quatre arguments són les quatre constants de més amunt. La funció spip_initialisation
és cridada just després de la càrrega de mes_options.php
,
i refusa silenciosament d’executar-se si ja ha estat cridada.
Conseqüentment, si a dins d’aquest fitxer aquesta funció és aplicada sobre diferents arguments deduïts de l’URL del lloc, tindrem tants usos de fonts d’SPIP com URL’s del lloc.
També podem definir en aquest fitxer les constants que serveixen al funcionament d’SPIP, tenint prioritat aquestes definicions sobre les que provarà de definir spip_initialisation
.
El codi que hi ha més avall, situat en el fitxer config/mes_options.php
agafa el nom de domini i executa una compartició sobre els quatre directoris tmp, local, config i IMG situats a dins de la carpeta sites/nom_du_domaine/
.
Abans, la definició d’algunes constants permet centralitzar els fitxers de centralització de tots els llocs en un únic directori, log
, i no a sites/nom_du_domaine/tmp/
per a cadascun. Aquesta centralització no té res d’obligatòria però es revela útil; es pot aplicar també als directoris d’ajuda i de salvaguarda.
<?php
$rep = 'sites/';
$site = $_SERVER['HTTP_HOST'];
$path = _DIR_RACINE . $rep . $site . '/';
// ordre de cerca dels camins
define('_SPIP_PATH',
$path . ':' .
_DIR_RACINE .':' .
_DIR_RACINE .'squelettes-dist/:' .
_DIR_RACINE .'prive/:' .
_DIR_RESTREINT);
// afegit de la carpeta squelette
if (is_dir($path . 'squelettes'))
$GLOBALS['dossier_squelettes'] = $rep . $site . '/squelettes';
// exemple de logs a l'arrel per tots els llocs
define('_FILE_LOG_SUFFIX', '_' . $site . '.log');
define('_DIR_LOG', _DIR_RACINE . 'log/');
// prefixes de galetes i taules:
$cookie_prefix = str_replace('.', '_', $site);
$table_prefix = 'spip';
// execució del fitxer config/mes_option.php del lloc compartit
if (is_readable($f = $path . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php'))
include($f);
// inici del lloc
spip_initialisation(
($path . _NOM_PERMANENTS_INACCESSIBLES),
($path . _NOM_PERMANENTS_ACCESSIBLES),
($path . _NOM_TEMPORAIRES_INACCESSIBLES),
($path . _NOM_TEMPORAIRES_ACCESSIBLES)
);
?>
Compartir dominis i subdominis
Per compartir diversos dominis o subdominis, els heu de redirigir tots cap el directori físic que conté SPIP. Per exemple, http://example.org/
, http://example.net/
i http://sous_domaine.example.net/
. Per compartir-los cal que tots apuntin cap el mateix directori, com /var/www/spip/
.
Aquesta carpeta conté, per tant, SPIP i també un fitxer config/mes_options.php
per activar la compartició. Si reprenem l’exemple de codi donat més amunt, haurem de crear llavors les carpetes sites i log però també sites/example.org, sites/example.net i sites/sous_domaine.example.net i a dins de cadascun d’ells els directoris config, local, IMG i tmp accessibles a l’escriptura. No cal fer res més. Anant a un dels llocs, SPIP hauria de proposar-vos la seva instal·lació.
Si desitgeu poder activar tipus d’url diferents, com els «url arborescents» o els «url propis», necessitareu crear un fitxer d’accés Http, que es proporciona amb la distribució amb el nom de htaccess.txt
: n’hi ha prou canviant-li el nom per .htaccess
per posar-lo en marxa. S’aplicarà a tots els llocs compartits, però es possible tenir accessos diferenciats si configurem astutament el servidor (veure més avall). En tots dos casos, tot això només funcionarà si el vostre servidor accepta executar totes les directives presentades en aquest fitxer, sobretot les que fan referència a la reescriptura d’url («url rewriting»).
Compartir els directoris d’un domini
Cada carpeta (virtual) d’un domini, analitzant correctament l’URL, pot ser també un lloc SPIP compartit. Per això fa falta que l’URL de la carpeta estigui redirigida de manera transparent cap a l’arrel d’SPIP. És el paper del fitxer .htaccess
modificat. D’aquesta manera http://example.com/premier_site/
i http://example.com/second_site/
poden ser cadascun llocs SPIP compartits (i http://example.com/
també).
En un primer temps, cal reanomenar el htaccess.txt com a .htaccess i modificar-lo per indicar que els directoris que són virtuals han d’apuntar a l’arrel d’SPIP. Per fer això, afegir a la part «Ajustos personalitzats» o bé el codi genèric que tracta tots els directoris virtuals (però http://example.com/premier_site sense / final enviarà un error), o bé un codi que indiqui els noms de carpetes (cap error si no hi ha cap / final):
// codi genèric
RewriteCond %{REQUEST_URI} !^/(config|ecrire|IMG|prive|plugins|plugins-dist|sites|squelettes-dist|squelettes|tmp|lib|local|mutualisation)/(.*)
RewriteRule ^[^/]+/(.*) /$1 [QSA,L]
// O codi específic
RewriteRule ^(premier_site|second_site)$ /$1/ [R,L]
RewriteRule ^(premier_site|second_site)/(.*) /$2 [QSA,L]
En un segon temps, cal crear una compartició analitzant en el fitxer config/mes_options.php
el url transmès. Aquí un exemple per tenir els llocs compartits a sites/exemple.com, sites/premier_site i sites/second_site:
<?php
if (
(
preg_match(',^/([\.a-zA-Z0-9_-]+)/,', $_SERVER['REQUEST_URI'], $r)
AND !is_dir(_DIR_RACINE . $r[1])
)
) {
$site = $r[1];
} else {
$site = $_SERVER['HTTP_HOST'];
}
$rep = 'sites/';
$path = _DIR_RACINE . $rep . $site . '/';
// ordre de cerca dels camins
define('_SPIP_PATH',
$path . ':' .
_DIR_RACINE .':' .
_DIR_RACINE .'squelettes-dist/:' .
_DIR_RACINE .'prive/:' .
_DIR_RESTREINT);
// afegit de la carpeta squelette
if (is_dir($path . 'squelettes'))
$GLOBALS['dossier_squelettes'] = $rep . $site . '/squelettes';
// prefixos de les galetes i les taules:
$cookie_prefix = str_replace('.', '_', $site);
$table_prefix = 'spip';
// execució del fitxer config/mes_option.php del lloc compartit
if (is_readable($f = $path . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php'))
include($f);
// inici del lloc
spip_initialisation(
($path . _NOM_PERMANENTS_INACCESSIBLES),
($path . _NOM_PERMANENTS_ACCESSIBLES),
($path . _NOM_TEMPORAIRES_INACCESSIBLES),
($path . _NOM_TEMPORAIRES_ACCESSIBLES)
);
?>
Prefix de les taules
Els exemples presentats necessiten tantes bases de dades com llocs compartits. No obstant, és possible instal·lar tots els llocs en una mateixa base de dades, prefixant els noms de les seves taules en un únic prefix.
El següent exemple crea un prefix de 8 caràcters: un prefix amb les 4 primeres lletres del lloc, seguit d’uns altres 4 caràcters.
$table_prefix = substr(str_replace('.', '_', $site),0,4) . substr(md5($site),0,4);
Fitxer config/mes_options.php
Qualsevol modificació del fitxer config/mes_options.php del nucli SPIP afectarà les opcions de tots els llocs allotjats.
Per exemple, posar en aquest fitxer:
$type_urls = ’propres’ ;
farà que, per defecte, tots els llocs tinguin aquest tipus d’URL... Però cada lloc pot canviar-ho dins el seu propi /sites/repertoire_du_site/config/mes_options.php.
Configurar Apache pels dominis i els subdominis
La compartició al cantó servidor, pel que fa referència a la gestió dels subdominis o dels dominis és simple. N’hi ha prou creant una redirecció entre el nom de domini i el directori físic on està emmagatzemat SPIP.
Heus aquí un exemple de configuració (mínim) per a un servidor anomenat ’exemple.tld’ utilitzant subdominis. El fitxer de configuració s’ha de crear a dins de /etc/apache2/sites_availables/exemple.tld, que cal activar a continuació
sudo a2ensite exemple.tld
sudo /etc/init.d/apache2 reload
SPIP està instal·lat, en aquest exemple, a dins de ’/var/www/spip/’.
<VirtualHost *>
ServerName exemple.tld
ServerAdmin webmaster@localhost
ServerAlias *.exemple.tld
DocumentRoot /var/www/spip/
<Directory /var/www/spip/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Si voleu a més a més tenir fitxers d’accés diferenciats, en teniu prou utilitzant la directiva AccessFileName a l’interior de la directiva VirtualHost, de manera que el fitxer d’accés del lloc S s’anomeni, per exemple, .htaccess-
S.
Nota sobre les salvaguardes i les restauracions
Cada lloc copia per defecte els seus fitxers de salvaguardes a dins del directori /sites/premier_site/tmp/dump (o /sites/premier_site/tmp/upload/login per les salvaguardes d’un administrador restringit).
Les restauracions es fan per mitjà de la mateixa carpeta. El camí de les imatges també és té en compte correctament [3].