Issu de https://discuter.spip.net/t/bug-avec-le-script-de-chargeur-spip/189964
erational partage un patch qui permet de charger SPIP depuis un script PHP :
//
// Charger SPIP
//
if (!defined('_ECRIRE_INC_VERSION')) {
// recherche du loader SPIP.
require_once __DIR__ . '/../vendor/autoload.php'; // ligne requise à partir de SPIP 4.4
$deep = 2;
$lanceur ='ecrire/inc_version.php';
$include = './'.$lanceur;
while (!defined('_ECRIRE_INC_VERSION') && $deep++ < 6) {
// attention a pas descendre trop loin tout de meme !
// plugins/zone/stable/nom/version/tests/ maximum cherche
//$include = '../' . $include;
if (file_exists($include)) {
chdir(dirname(dirname($include)));
require $lanceur;
}
}
}
if (!defined('_ECRIRE_INC_VERSION')) {
die("<strong>Echec :</strong> SPIP ne peut pas etre demarre.<br />
Vous utilisez certainement un lien symbolique dans votre repertoire plugins.");
}
marcimat propose une simplification si le script est à la racine :
if (!defined('_ECRIRE_INC_VERSION')) {
chdir(__DIR__);
require_once(__DIR__ . '/vendor/autoload.php';
require_once(__DIR__ . '/ecrire/inc_version.php';
}
Et s’il peut être ailleurs :
if (!defined('_ECRIRE_INC_VERSION')) {
$deep = 6;
$dir = __DIR__;
$found = file_exists($dir . '/ecrire/inc_version.php';
while (!$found && $deep-- > 0) {
$dir = dirname(__DIR__);
$found = file_exists($dir . '/ecrire/inc_version.php';
}
if ($found) {
chdir($dir);
require_once('vendor/autoload.php';
require_once('ecrire/inc_version.php';
} else {
throw new \RuntimeException('Impossible de démarrer SPIP');
}
}
Cerdic explique alors qu’il est possible d’utiliser spip-cli pour lancer SPIP et faire les initialisations requises avant d’inclure un script monscript.php
qui n’a donc pas à s’en occuper :
spip php:run --include monscript.php
« J’utilise souvent ça pour du debug ou des bidouilles jetables qui n’ont pas besoin d’être mises au propre. »