<?php
// ------------------------------------------------------------------------- //
// Enregistrer un fichier '.doc' en '.txt' //
// ------------------------------------------------------------------------- //
// Auteur: Sémhur <semhur@voonoo.net> //
// Web: //
// ------------------------------------------------------------------------- //
/*
Cette fonction enregistre le contenu textuel d'un document '.doc' dans un
fichier '.txt'. Pratique pour effectuer une recherche en texte intégral, le
fichier '.txt' étant beaucoup plus léger, ou pour rendre lisible un document
'.doc' à quelqu'un qui n'aurait pas Word d'installé.
Fonctionne pour Word 97, 2000 et 2002
*/
// Entrer ici le fichier à transformer :
echo liredoc("mon_fichier.doc");
// *****************************************************************************
// Définition de la fonction "liredoc", qui stocke le texte d'un fichier ".doc"
// (Word 97, 2002 ou 2002 uniquement) dans un fichier ".doc.txt"
// *****************************************************************************
function liredoc($fichier) {
// Cette chaine se trouve juste avant le premier caractère lisible de tout
// document word
$debut_binaire = "00d9000000";
// Pareil pour la fin
$fin_binaire = "0000";
$chaine = $chaine_ascii = "";
// Ouverture du document word en mode binaire
$fp = fopen($fichier,"rb");
while (!feof($fp)) {
$chaine = fread($fp,filesize($fichier));
// Codage du fichier en mode hexadécimal
$chaine = bin2hex($chaine);
// Enlève tous les caractères illisibles du début du fichier
$debut_chaine = strpos($chaine,$debut_binaire)+10;
$chaine = substr($chaine,$debut_chaine,filesize($fichier));
// Pareil pour la fin
$fin_chaine = strpos($chaine,$fin_binaire);
$chaine = substr($chaine,0,$fin_chaine);
// Codage de la chaine hexa en texte ascii :
for ($i=0;$i<strlen($chaine);$i+=2) {
// On prend les deux caractères hexa...
$car=substr($chaine,$i,2);
// On enlève ou remplace certains indésirables...
if ($car!="00") {
if ($car!="0d") {
// On code les hexa en décimal, puis en ascii
$car=hexdec($car);
$car=chr($car);
} else $car = "<BR>";
} else $car = "";
$chaine_ascii.=$car;
}
}
fclose($fp);
// Enregistrement dans un fichier ".doc.txt"
$fichier_txt = str_replace(".doc",".doc.txt",$fichier);
$fp = fopen($fichier_txt,"w+");
fwrite($fp,$chaine_ascii);
fclose($fp);
// Sert uniquement pour afficher le résultat pendant les tests. A enlever.
return $chaine_ascii;
}
?>