Carnet Wiki

Appeler SPIP depuis un autre programme PHP

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. »

JLuc - Mise à jour :11 April 2025 at 23:19