Il y a actuellement
330 tutoriaux sur Aidoforum. Toute reproduction, partielle ou complète, est interdite.
Ajoutez vos propres tutoriaux sur Aidoforum !
- Retour aux tutoriaux
Lorsque vous tapez un message, tous les mots sont inscrits dans la base de données dans les tables phpbb_search_wordlist et phpbb_search_wordmatch
Il se trouve que ces 2 tables grossissent très vite voici donc un petit truc pour en diminuer la taille.
Il faut éviter d'indéxer les caractères uniques ainsi que les mots de 2 ou 3 lettres.
Il faut pour cela créer un fichier nommé search_stopwords.txt dans lequel vous allez entrer tout ce que vous voulez bloquer.
(ce fichier existe dans le répertoire de langue anglaise)
Dans ce fichier, entrez chaque mot sur une ligne et rien d'autre, exemple :
pas
que
pour
les
mes
je
tu
il
nous
vous
ils
etc...
Vous pouvez ajouter ce que vous voulez et tout ce qui sera dans ce fichier ne sera plus inscrit dans la base.
Une fois ce fichier créé, envoyez-le dans votre répertoire language/lang_french ou le répertoire de la langue que vous utilisez.
Si vous utilisez plusieurs langues il vous faudra créer un fichier search_stopwords.txt pour chacune de ces langues.
Maintenant pour faire le ménage dans une base existante, copiez le code ci-dessous et créer un fichier php que vous nommez comme vous voulez.
<?php
//***** reduce_my_searchtables_with_stopwords.php ****//
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
// Start session management
$userdata = session_pagestart($user_ip, PAGE_SEARCH);
init_userprefs($userdata);
// End session management
$stopwords_array = file($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . "/search_stopwords.txt");
$liste='';
foreach($stopwords_array as $curr_word)
{
$liste .= ( ( $liste != '' ) ? ', ' : '' ) ."'".trim($curr_word)."'";
}
$sql = "SELECT word_id
FROM " . SEARCH_WORD_TABLE . "
WHERE word_text IN ($liste)";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain common word list', '', __LINE__, __FILE__, $sql);
}
$common_word_id = '';
while ( $row = $db->sql_fetchrow($result) )
{
$common_word_id .= ( ( $common_word_id != '' ) ? ', ' : '' ) . $row['word_id'];
}
if ($common_word_id=='') message_die(GENERAL_ERROR,'None of the words in the list are in your search_tables.<br>Note: This could also mean the list is empty ;)');
//echo '>'.trim($curr_word)."<<br>";
//echo $liste .'<br>'. $common_word_id;
//exit;
$sql = "DELETE FROM " . SEARCH_WORD_TABLE . "
WHERE word_id IN ($common_word_id)";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not delete word match entry', '', __LINE__, __FILE__, $sql);
}
$sql = "OPTIMIZE TABLE " . SEARCH_WORD_TABLE;
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not optimize', '', __LINE__, __FILE__, $sql);
}
$sql = "DELETE FROM " . SEARCH_MATCH_TABLE . "
WHERE word_id IN ($common_word_id)";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not delete word match entry', '', __LINE__, __FILE__, $sql);
}
$sql = "OPTIMIZE TABLE " . SEARCH_MATCH_TABLE;
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not pütimize', '', __LINE__, __FILE__, $sql);
}
message_die(GENERAL_MESSAGE,'<b>Done!</b><br><br>The following list-entries have been removed from your searchtables:'.$liste);
//echo $liste .'<br>'. $common_word_id;
?>
Envoyez ce fichier à la racine de votre forum puis appelez-le depuis votre navigateur en tapant l'adresse de votre forum/le_fichier.php
Ce script va lire les mots que vous avez placés dans le fichier search_stopwords.txt et va les supprimer de la base de données.
Une fois que cela est fait passez sur phpmyadmin ou eskuel en mode requette manuelle et éxécutez cette requette :
SELECT ls.word_id, ls.word_text, COUNT(wm.word_id) as entries FROM `phpbb_search_wordlist` as ls LEFT JOIN `phpbb_search_wordmatch` as wm ON ls.word_id=wm.word_id GROUP BY wm.word_id ORDER BY entries DESC LIMIT 0,100
Cette requette va afficher sur trois colonnes la liste des 100 mots les plus utilisés dans votre base, choisissez dans cette liste les mots que vous souhaitez bloquer et supprimer de votre base et ajoutez-les dans le fichier search_stopwords.txt, ré-uploadez-le et relancez le script.
Vous pouvez afficher plus de mots en modifiant à la fin de cette commande le DESC LIMIT 0,100 changez la valeur 100 par ce que vous voulez sans éxagérer (le résultat sera un peu plus long à s'afficher)
Répetez cette opération autant de fois que vous voulez.
Une fois que vous avez fini, pensez à supprimer le script de votre ftp par mesure de sécurité.
Conservez-le pour une utilisation ultérieure.
Par la suite, si vous pensez que d'autres mots doivent être bloqués, ajoutez-les simplement dans le fichier search_stopwords.txt et ré-uploadez-le.
Conseil : dans votre fichier search_stopwords.txt commencez par insérer les lettres de l'alphabet de a à z ainsi que les chiffres de 0 à 9 toujours un par ligne.
Si vous voulez ensuite ajouter encore d'autres mots, allez dans votre base sur la table phpbb_search_wordlist en mode affichage et regardez les mots qui sont toujours dans la table, si vous en voyez que vous jugez inutiles, ajoutez-les dans le fichier search_stopwords.txt, ré-uploadez-le et relancez le script.
Je sais, ceux qui ont déjà beaucoup de messages vont me dire que cette opération prend du temps mais on a rien sans rien et de plus on est pas obligé de faire ça, c'est juste un petit plus.
Vous n'êtes pas non plus obligé de faire tout en une seule fois, un petit peu chaque jour, vous notez le word_id où vous vous êtes arrêté et vous reprenez le lendemain et lorsque vous êtes arrivé au bout de la liste, ré-uploadez le fichier search_stopwords.txt et relancez le script de nettoyage.
Lorsque vous installez un forum phpBB tout neuf, pensez à créer le fichier search_stopwords.txt dès le départ de façon à bloquer d'entrée tous ces mots inutiles.
Je sais qu'il n'est pas évident de trouver de tête la liste complète mais vous pouvez ajouter au fur et à mesure autant de mots que vous souhaitez et lancer le script de nettoyage quand vous voulez.
Il y a ici http://www.geocities.com/gatineauhull/petitsmots.htm une liste qui peut être utile de mots de 2 et 3 lettres.
Si cette explication n'est pas claire ou vous pose un problème, n'hésitez-pas à utiliser ce forum.
Par Zorik, le 25 Octobre 2004 à 10h10
Commentaire de pierre.linus 2009-01-25 18:17:32
Merci pour cette astuce vraiment sympa.
Le problème c'est qu'elle date un peu et donc ne fonctionne plus pour la version 3 de phpbb.
Serait-il possible de la mettre à jour ? Ca m'aiderait beaucoup.
Merci d'avance !