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 > 1 ? '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($result, dir_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($f, DIRECTORY_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/phpet la version compressée si problème de copier/coller :
