Recherchez dans les fichiers à l'aide de PHP
-
27-09-2019 - |
Question
Comment rechercher du texte dans des fichiers tels que PDF, doc, docs ou txt en utilisant PHP? Je veux faire la même fonction que recherche de texte intégral dans MySQL, mais cette fois, je recherche directement dans les fichiers, et non pas la base de données.
La recherche va faire la recherche dans de nombreux fichiers situés dans un dossier. Toute suggestion, des conseils ou des solutions à ce problème?
J'ai aussi remarqué que, google aussi faire une recherche dans les fichiers.
La solution
Pour la recherche PDF, vous aurez besoin est un programme comme pdftotext, qui convertit le contenu d'un PDF en texte. Pour les documents Word un thingy Simular pourrait être disponible (à cause de tout le style et le cryptage des fichiers Word).
Un exemple de recherche par le biais de PDF (copié à partir d'un de mes scripts (c'est un extrait, pas tout le code, mais il devrait vous donner une certaine compréhension) où j'extraire des mots-clés et les matches de magasin dans un tableau PDF résultats.) :
foreach($keywords as $keyword)
{
$keyword = strtolower($keyword);
$file = ABSOLUTE_PATH_SITE."_uploaded/files/Transcripties/".$pdfFiles[$i];
$content = addslashes(shell_exec('/usr/bin/pdftotext \''.$file.'\' -'));
$result = substr_count(strtolower($content), $keyword);
if($result > 0)
{
if(!in_array($pdfFiles[$i], $matchesOnPDF))
{
array_push($matchesOnPDF, array(
"matches" => $result,
"type" => "PDF",
"pdfFile" => $pdfFiles[$i]));
}
}
}
Autres conseils
En fonction du type de fichier, vous devez convertir le fichier texte et la recherche à travers l'aide à savoir file_get_contents()
et str_pos()
. Pour convertir des fichiers au texte, vous avez - à côté d'autres - les outils suivants:
-
catdoc
pour les fichiers de mots -
xlhtml
pour les fichiers Excel -
ppthtml
pour les fichiers powerpoint -
unrtf
pour les fichiers RTF -
pdftotext
pour les fichiers pdf
Si vous êtes sous un serveur Linux, vous pouvez utiliser
grep -R "text to be searched for" ./ // location is everything under the actual directory
appelé à partir de PHP en utilisant exec résultant en
cmd = 'grep -R "text to be searched for" ./';
$result = exec(grep);
print_r(result);