Tutorial : Modifier un lien de l'ancien forum pour y accéder

Tout ce qui touche au site et à son devenir
Avatar du membre
McColson
Admin du site
Admin du site
Messages : 7869
Enregistré le : 07 nov. 2004, 1:00
Localisation : Dammartin-sur-Tigeaux
Contact :

Tutorial : Modifier un lien de l'ancien forum pour y accéder

Message non lu par McColson »

Bonjour,

Avec la migration du site sous sa nouvelle forme, les liens qui pointaient vers des sujets dans l'ancien forum sont tous devenus obsolètes.
Je vous propose un petit tuto pour retrouver quand même le sujet qui vous intéressait.

Le lien de l'ancien forum était de la forme :

Code : Tout sélectionner

http://www.projetg5.com/phpbb3/viewtopic.php?t=316&start=0
Les liens du nouveau forum sont de cette forme :

Code : Tout sélectionner

http://www.projetg5.com/phpbb3/viewtopic.php?f=23&t=2617
Il suffit de modifier l'adresse manuellement dans votre navigateur en remplaçant les chiffres et en enlevant le "f=.."

Code : Tout sélectionner

http://www.projetg5.com/phpbb3/viewtopic.php?&t=316
De plus vous pouvez aussi alertez un modérateur en cliquant sur le bouton Image situé en bas à droite du message, en sélectionnant comme raison "Lien ancien forum".

Il y aura surement énormément de travail pour modifier tous les liens, je compte sur vous pour utiliser cette fonction principalement pour les liens les plus importants !
Vous pouvez aussi m'envoyer un MP pour postuler au rôle de modérateur pour filer un coup de main !

Merci de votre aide.
mik
Co-Admin
Co-Admin
Messages : 20
Enregistré le : 25 avr. 2012, 22:23

Re: Tutorial : Modifier un lien de l'ancien forum pour y acc

Message non lu par mik »

J'ai pondu un script php qui devrai permettre de mettre à jour tous les liens des posts.
Je l'ai testé avec succès sur une install locale de phpbb3.

Voici le principe :
  1. La table des posts est dupliqué
  2. Le traitement est effectué sur cette table temporaire dupliqué (remplacement des liens)
  3. Si tout c'est bien passé, la table d'origine est renommé (pour sauvegarde), puis la table temporaire modifiée est renommée pour être utilisée à la place de l'ancienne (celle avec les liens érronés)
Il suffit de modifier la configuration de la base de donnée et le nom de la table des post si nessecaire en haut du script dans la partie "CONFIGURATION", de placer le script dans le répertoire /phpbb3/, de l'appeller depuis un naviguateur, ET d'attendre que ça affiche "TRAITEMENT OK".

Si une erreur est rencontrée, tout s'arrête, si le résultat est mauvais, la table d'origine a été sauvegardé, on peut donc facilement revenir en arrière en renommant cette table.

En théorie, tout devrait se passer correctement, mais un backup complet de la base avant l'opération est tout de même impérativement à réaliser, au cas ou ...

Je n'arrive pas a passer le code en pièce jointe, le voici donc ( a placer dans une fichier maj_projetg5_links.php par exemple )

Code : Tout sélectionner

<?php  
//------------------------------------------------------------------------------ 
// CONFIGURATION
//------------------------------------------------------------------------------ 
$db_host		= '127.0.0.1';		// Nom du serveur
$db_login		= 'root';			// Login  
$db_pass		= '';				// Password 
$db_name		= 'phpbb3';			// Nom de la base de donnée
$table_name		= 'phpbb_posts';	// Nom de la table des posts
//------------------------------------------------------------------------------ 
// SCRIPT
//------------------------------------------------------------------------------
$replaces = array(
	array(
		'@http(&#58;|:)//(www(&#46;|\.))?projetg5(&#46;|\.)com/modules(&#46;|\.)php\?name=Forums&file=(viewtopic|viewforum)&@i',
		'http&#58;//www&#46;projetg5&#46;com/phpbb3/\\6&#46;php?'
	),
	array(
		'@http://(www\.)?projetg5\.com/modules\.php\?nam(e=Fo|e=To)? \.\.\. (pic&(amp;)?|rum&(amp;)?)?@i',
		'http&#58;//www&#46;projetg5&#46;com/phpbb3/ ... '
	)
);   
//------------------------------------------------------------------------------
// temps d'execution infini
set_time_limit(0);

// connexion bdd
mysql_connect($db_host,$db_login,$db_pass) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());

$table_tmp		= $table_name.'_'.date('YmdHis');
$table_backup	= $table_name.'_'.date('YmdHis').'_backup';

echo "GO<hr>\n";

// recopie les données de la table d'origine dans la table temporaire
mysql_query("CREATE TABLE $table_tmp LIKE $table_name") or die(mysql_error());   
mysql_query("INSERT $table_tmp SELECT * FROM $table_name") or die(mysql_error());   

// boucle de remplacement des liens dans la tabele temporaire ...
$result = mysql_query("SELECT post_id,post_text FROM $table_tmp") or die(mysql_error());  
while($row = mysql_fetch_array( $result )){ 
	foreach($replaces as $replace){	
		$row['post_text'] = preg_replace($replace[0],$replace[1],$row['post_text']);
	}
	mysql_query("UPDATE $table_tmp SET post_text='".mysql_real_escape_string($row['post_text'])."' WHERE post_id=".$row['post_id']."") or die(mysql_error());  
	echo "ok post ".$row['post_id']."<br>\n"; 
	flush(); // envoi des données au navigateur
}

// backup de la table d'origine
mysql_query("RENAME TABLE $table_name TO $table_backup") or die(mysql_error());   
// renomme la table temporaire pour prendre la place de la table d'origine
mysql_query("RENAME TABLE $table_tmp TO $table_name") or die(mysql_error());   

echo "<hr>TRAITEMENT OK";
//------------------------------------------------------------------------------
?>
Je suis dispo pour toute assistance sur ce script, et je m'engage pour toute assistance en cas de problème.
Je peu aussi l'envoyer par email si vous voulez.
Modifié en dernier par mik le 26 avr. 2012, 0:31, modifié 3 fois.
Verrouillé