©
. Document créé le 10 décembre 2010 , mis à jour le 24 avril 2011.Un problème sans solution est un problème mal posé. Albert Einstein
Accueil du site > Astuces > PHP > Compter les caractères et les mots d’un site web
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/php
et la version compressée si problème de copier/coller :
Les forums sont fermés.