Compter les caractères et les mots d’un site web

© Christian PAULUS. Document créé le 10 décembre 2010 , mis à jour le 24 avril 2011.

L'amour... il y a ceux qui en parlent et il y a ceux qui le font. A partir de quoi il m'apparaît urgent de me taire. Pierre Desproges

Accueil du site > Astuces > PHP > Compter les caractères et les mots d’un site web

Audit / PHP 5.3.3

Petit outil d’audit, wdir_txt_count.php permet de compter les signes et les mots de l’archive de votre site web.

A utiliser en ligne de commande.

Le résultat est le nombre de signes et de mots par fichier html ou texte, et le total en nombre de signes pour l’ensemble.

Pour constituer l’archive du site, la commande wget est une bonne solution. Un billet est consacré à cette commande sur Quesaco : Archiver un site web

Ensuite, placez vous dans le répertoire et lancez la commande wdir_txt_count.php.

En voici le script :

<?php

/*
 * wdir_txt_count: Inventaire d'un répertoire
 *     et sous répertoires.
 * Extrait le texte des fichiers HTML et TXT
 *  renvoie la longueur brute du texte
 *  + total en final
 * 
 * Licence MIT + GNU GPL, etc.
 * 
 * Christian Paulus <cpaulus at quesaco.org>
 * (c) 2010
 *
 * version: Ven 10 déc 2010 19:39:32 CET
 * 
 * */

/**
 * Usage :
 *
 * wdir_txt_count [file ...]
 *
 * Si aucun argument, traite le répertoire courant.
 *
 * */
define('TAB'"\t");

$cibles = array();

if(
$argc 1)
{
    
// arg[0] est le nom de ce script
    
    // Passer à l'argument suivant
    
while ($arg next($argv)) {
        
// collecter les cibles
        
$cibles[] = $arg;
    }
    
}
else {
    
$cibles[] = '.';
}

/**
 * supprime les espaces en trop
 * et renvoie la longueur du texte
 * */
function count_txt($texte)
{
    
$texte trim(preg_replace('=[[:space:]]+='' '$texte));
    
    
$nb_mots str_word_count($texte);
    
$nb_mots ' (' $nb_mots ' '
        
. ($nb_mots 'mots' 'mot' )
        . 
')';
    
    return(
strlen($texte) . $nb_mots);
}

/**
 * Auditer le dir
 * ou le fichier donné
 * Fonction récursive.
 * */
function dir_audit ($p)
{
    
$result = array();
    
    if(
is_dir($p))
    {
        foreach(
scandir($p) as $f)
        {
            if((
$f == '.')
               || (
$f == '..')) {
                continue;
            }
            
            
// ignorer les fichiers/dossiers invisibles
            
if($f[0] == '.') {
                continue;
            }
            
            if(
is_file($p.$f))
            {
                
$ext substr(strtolower(strrchr(basename($f), '.')), 1);
                
                switch(
$ext)
                {
                    case 
'txt':
                    case 
'text':
                    case 
'texte':
                        
$path $p $f;
                        
$cont file_get_contents($path);
                        
$result[] =
                            array(
                                
'path' => $path
                                
'len' => count_txt($cont)
                            );
                        break;
                    case 
'htm':
                    case 
'html':
                        
$path $p $f;
                        
$cont strip_tags(file_get_contents($path));
                        
$result[] =
                            array(
                                
'path' => $path
                                
'len' => count_txt($cont)
                            );
                        break;
                }
            }
            else if(
is_dir($p.$f))
            {
                
$result array_merge($resultdir_audit($p $f '/'));
            }
        }
    }
    return (
$result);
}

/**
 * Traiter la pile
 * Afficher le résultat
 * */
foreach($cibles as $f)
{
    
//if($f == '.') { $f .= '/'; }
    
if(is_dir($f))
    {
        
$f rtrim($fDIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    }
    
    
$total 0;
    
$result '';
    
    
$r dir_audit($f);
    
    foreach(
$r as $item)
    {
        
$result .= implode(TAB$item) . PHP_EOL;
        
$total += $item['len'];
    }
    
    echo(
$result PHP_EOL 'total: '$total PHP_EOL);
}

?>

Vous pouvez indiquer l’interpréteur en première ligne :

#!/usr/bin/php

et la version compressée si problème de copier/coller :

Zip - 1.6 ko

Plussoyez !

Les forums sont fermés.