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.
- Code: Tout sélectionner
<?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
if ($userdata['user_level'] != ADMIN )
{
message_die(GENERAL_MESSAGE, 'Vous n\'êtes pas autorisé à éxécuter ce script !');
}
$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,'Aucun des mots de la liste n\'a été trouvé dans vos tables de recherche.<br>Note: Celà peut également signifier que la liste est vide ;)');
}
$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 optimize', '', __LINE__, __FILE__, $sql);
}
message_die(GENERAL_MESSAGE,'<b>Terminé !</b><br /><br />Les mots suivants ont été retirés de vos tables de recherche :'.$liste);
?>- Code: Tout sélectionner
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
(ce fichier existe dans le répertoire de langue anglaise)
Dans ce fichier, entrez chaque mot sur une ligne et rien d'autre, exemple :
- oui
non
je
tu
il
nous
vous
ils
papa
toto
qui
1
2
a
b
c
» 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.
» 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 :
» 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.
- » 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.
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.
_________________________________________________
breakolami
modani script traduit et optimisé [11-02-05]





