[PHP] Datei Wort für Wort einlesen und ausgeben

M

Mr. Snoot

Gast
Hio,

kann ich mit PHP eine (Text-)Datei Wort für Wort einlesen und den gesamten Text ausgeben lassen?


Grund: ich würde gerne Suchtreffer hervorheben. D.h., wenn ein eingelesenes Wort mit dem Suchwort übereinstimmt, könnte man es ja einfach mit einer bestimmten Formatierung wieder ausgeben.

Einlesen und Ausgeben ist kein Problem, nur Wort für Wort ... Weiß leider nicht so recht, nach was ich googlen könnte.
 
Hallo,

mit der PHP Funktion file() kannst die Datei in ein Array einlesen, in dem dann alles Zeilen sind.
Die kann man dann mit explode() in die einzelnen Wörter trennen.

Gruß Tobias
 
Okay, danke schon mal.

Hätte es jetzt erstmal so gelöst, weil ich nen ähnlichen Codeschnipsel schon mal wo benutzt habe:
PHP:
$highlight = $_POST["exp_search"];

$file = "datei.php";

$auslesen = file_get_contents($file);

$ausgabe = str_replace($highlight, "<span style=\"font-weight:bold; color:#900\">$highlight</span>", $auslesen);

echo "$ausgabe";
Bevor ich mich da jetzt weiter reinknie, was wäre denn die bessere Lösung: mein Ansatz oder doch mit file() und explode()?
 
Zuletzt bearbeitet:
PHP:
$filecontents = "";
$file = file("test.php");
foreach($file as $arg) $filecontents .= $arg."\n";

$words = explode(" ",$filecontents);

foreach($words as $index=>$word){
if($word != $searchtext) continue;
$words[$index] = "<span ..>".$word."</span>";
}

foreach($words as $word){
/* nach lust und laune wieder zusammensetzen hier */
}

sollte vom Ablauf schneller sein da search&replace Sachen immer recht belastend sind, darum file+explode :)

//man kann das natürlich auch in einer schleife abhandeln, kommt drauf an wie man es nutzen will..
 
Zuletzt bearbeitet:
Hm, irgendwie bin ich für deine Lösung zu doof :D
So sähe das ganze mit "meiner" file_get_contents-Methode aus:
PHP:
<?php

$datei = "datei.php";

$einlesen = file_get_contents($datei);

if(isset($_GET['search_exp']))
{
  $highlight = htmlentities($_GET['search_exp']);
  function markieren($einlesen, $highlight)
  {
    $highlight = split(" ",$highlight);
    foreach($highlight as $search_str)
    {
      $einlesen = preg_replace("/((<[^>]*)|$search_str)/ie", '"\2"=="\1"? "\1":"<span class=\"suchbegriff\">\1</span>"', $einlesen);
    }
    return $einlesen;
  }
  echo markieren($einlesen, $highlight);
}
else
{
echo $einlesen;
}

?>
Die Frage ist jetzt, wie belastend ist das ganze im Gegensatz zu deiner/eurer Vorgehensweise? Die einzulesenden Dateien sind idR kleiner als 10 KB (lediglich zwei sind mit 13 bzw. 14 KB etwas größer), somit sehe ich das ganze nicht so eng (vermutlich wird sich an den Dateien wenig ändern, was die Größe angeht).
 
Zurück
Oben