Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.7 KiB

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
10 years ago
/**
* Gestion d'affichage de la page de réparation de la base de données
*
10 years ago
* ## REMARQUE IMPORTANTE : SÉCURITÉ
*
10 years ago
* Ce systeme de réparation doit pouvoir fonctionner même si
* la table spip_auteurs est en panne : index.php n'appelle donc pas
10 years ago
* inc_auth ; seule l'authentification FTP est exigée.
*
10 years ago
* @package SPIP\Core\Exec
*/
10 years ago
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
10 years ago
/**
10 years ago
* Réparer la base de données
*/
function exec_base_repair_dist() {
$ok = false;
if (!spip_connect()) {
$message = _T('titre_probleme_technique');
} else {
$version_sql = sql_version();
if (!$version_sql) {
$message = _T('avis_erreur_connexion_mysql');
} else {
$message = _T('texte_requetes_echouent');
$ok = true;
}
$action = _T('texte_tenter_reparation');
}
if ($ok) {
Rendre surchargeable la fonction d'authentification hors HTTP inc_admin. Interface: cette fonction reçoit comme premier argument un nom et demande la création d'un répertoire déduit de ce nom et de l'heure, et relance le script. Si le répertoire existe déjà (au 2e appel normalement) elle mémorise dans la table spip_meta le $REQUEST ayant provoqué l'appel, cette méta étant nommée également par le premier argument. Elle effectue ensuite un charger_fonction sur ce nom et le répertoire {{{base}}} (car ces actions concernent toujours la base de donnnées: upgrade, delete_all, convert_utf8, admin_repair). En cas d'interruption du script, tester la présence de telles variables au niveau de ecrire/index.php permet de s'apercevoir de l'interruption, et de reprendre le travail avec les valeurs transmises dans $_REQUEST lors du premier appel (n'est utilisé actuellement que pour import_all). Lorsque la fonction chargée a fini le travail, la meta et le repertoire sont supprimés. La fonction inc_admin admet 3 arguments supplémentaires optionnels: le titre de la page, un texte preliminaire expliquant l'action entreprise après création du répertoire, et une URL de retour. Au passage, ajout de la destruction du cache du menu des rubriques dans l'action de purge des caches, sinon on croit que l'action convert_utf8 n'a pas marché. La rationnalisation des noms induit donc que la meta "debut_restauration" se nomme à présent "import_all", et "conversion_charset" se nomme "convert_utf8; cet arbitraire ne devrait avoir aucune conséquence. Il reste un cas d'appel de debut_admin en dehors de ce schéma, lié au passage inachevé en plugin de la gestion du vieux htpassword.
16 years ago
$admin = charger_fonction('admin', 'inc');
echo $admin('repair', $action, $message, true);
} else {
Pour eviter aux scripts Ajax de charger systématiquement les 130Ko totalisés par inc/minipres.php inc/texte.php inc/filtres.php et inc/charsets.php (et pour faciliter la lecture de ecrire/index.php aux nouveaux venus), cette suite d'inclusions ne sera bientot plus opérées par ecrire/index;php. Cette opération devait transparente pour le noyau, mais pourra etre perceptible pour les extensions de SPIP définissant ou complétant l'espace privé, notamment en créant des fichiers dans un répertoire exec/. Pour se préparer à ce changement, ces extensions ont deux possibilités: - la plus simple: rajouter dans leurs fichiers le {{{include_spip('inc/minipres/')}}} qui sera bientot retiré de ecrire/index.php - la plus pertinente: tester chacun de ces fichiers pour regarder s'ils ont besoin ou non de ces 130Ko. Pour ce faire on peut utiliser le shell-script suivant, où la variable {{{session}}} doit etre affectée à une session valide sur votre machine: #!/bin/sh session="require('../tmp/sessions/521_0a154a3fdb1dfa9443d8cec28e7c5743.php');" for i in ??*.php do z=../_$i.php sed "s,<\?php,<\?php require 'inc_version.php';spip_connect();include_spip('inc/sessions');$session," $i > $z f=$(basename $i .php) echo "<?php exec_${f}_dist(); ?>" >> $z echo ">>>>>>>>>>>>>$i" php -q $z |grep Fatal rm $z done Il faut aussi executer ce script avec {{{session=''}}} pour bien faire. Les messages de fonctions indéfinies qui pourraient arriver pendant ces exécutions signalent qu'une au moins des 4 inclusions éliminées est indispensable au script considéré, il faut alors l'ajouter à l'endroit approprié. Le présent dépot ajoute les inclusions repérées par ce shell-script. Elle sont donc superflues jusqu'au remplacement de inc/minipres par inc/lang dans index.php.
16 years ago
include_spip('inc/minipres');
echo minipres(_T('titre_reparation'), "<p>$message</p>");
}
}