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 :
- La table des posts est dupliqué
- Le traitement est effectué sur cette table temporaire dupliqué (remplacement des liens)
- 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(:|:)//(www(.|\.))?projetg5(.|\.)com/modules(.|\.)php\?name=Forums&file=(viewtopic|viewforum)&@i',
'http://www.projetg5.com/phpbb3/\\6.php?'
),
array(
'@http://(www\.)?projetg5\.com/modules\.php\?nam(e=Fo|e=To)? \.\.\. (pic&(amp;)?|rum&(amp;)?)?@i',
'http://www.projetg5.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.