Auslesen von lokalen htm-Dateien

Ich habe nun mal meinen Code und deinen gegenübergestellt. Der einzige Unterschied ist das mein Code erweitert ist und das du POST anstatt von GET benutzt. Ich kann mir deshalb nicht erklären warum das nicht funktioniert. Mit den HTM Dateien kann das ja eigentlich nciht zusammenhängen?


Edit:
hab spasseshalber deinen Code mal bei mir ausgeführt. Bei mir zeigt er nur die Links an zu den Dokumenten und die Links für die Anker. Aber die Ausgabe wie in deinem Besispiel (oben - der Link zu deinem Server) erfolgt auch nicht?
 
Zuletzt bearbeitet:
HI,
teste das mal:
PHP:
<?php
//---------------eigene Funktion------------------------------------------
//durchsucht eine htm Datei nach dem Anfangtag TITLE und dem Endtag /TITLE
//der Text dazwischen wird in $title gespeichert.

error_reporting(E_ALL);

  function getHTMLTitle($filename)
  {
    $f = fopen($filename, 'rb');
    $data = fread ($f, filesize ($filename));
    $title_start = strpos(strtoupper($data), '<TITLE>');
    if ($title_start)
    {
      $title_start += 7;
      $title_length = strpos(strtoupper($data), '</TITLE>');
      if ($title_length)
      {
         $title_length -= $title_start;
         return substr($data, $title_start, $title_length);
      }
      //else return 'FEHLER: TITEL Ende nicht gefunden';
      else return 'Titel unbekannt';
    }
    //else return 'FEHLER: TITEL Anfang nicht gefunden';
    else return 'Titel unbekannt';
  }
//---------------eigene Funktion------------------------------------------ 
  
  echo "Anzuzeigendes Thema ausw&auml;hlen: <br><br>";
  
// wenn kein Suchbegriff eingegeben wurde Skript abbrechen 
    if(!isset($_GET['s']))
    {    
     //abbrechen
     die();
    }
// wenn Suchbegriff eingegeben    
    else
    {
       // Überprüfung der Länge des Strings, wenn kleiner wie 2 dann Fehlermeldung
         if (strlen($_GET['s']) < 2)
       {
       echo "Bitte geben Sie mehr als 2 Zeichen ein!";
     }
     // Wenn Stringlänge OK ...
     else
     {   
           //hilfsvariable
          $result=0;
          $search = $_GET['s'];
        // dateinamen der html dateien einlesen
        foreach (glob('*.htm') as $document) 
        {           
          $array = array();
          $anzahl = array();
          
          //aktuellen Dokumentnamen übergeben
          $title = getHTMLTitle($document);
          //hilfsVariable
          $titleNew = 0;
          
          //wenn stringlänge von title länger als 10 dann ...
          if (strlen($title) > 10)
          {
            $punkte = '...';
            //ab dem ersten zeichen zählen und auf 10 zeichen kürzen
            $GekuerzterTitle = substr($title, 0, 26);
            //Punkte an gekürzten text anhängen
            $titleNew = $GekuerzterTitle.$punkte;
          }
          
          $content = strip_tags(file_get_contents($document));

          $array = explode(" ",$content);
          

          for($y=0;$y<count($array);$y++) {
          
          if (!strcasecmp($array[$y],$search) ) {
            echo $array[$y-1] . " " . $array[$y] . " " . $array[$y+1];
          }
               
            if ( preg_match("/$search/i",$array[$y]) ) {
              array_push($anzahl,$y);
            }
          }
          //wenn anzahl nicht leer dann ...
          if(!empty($anzahl) ) 
          {
            //hilfsvariable
            $result=1;

            //Ankerpunkte für Treffer im Dokument hochzählen
            for($y=0;$y<count($anzahl);$y++) 
            {
              //wenn y kleiner wie 1 dann titel ausgeben, ansonsten nicht (Gruppierung)
              if ($y < 1)
              {
                //wenn titel nicht länger als 10 zeichen unveränderten titel ausgeben
                if ($titleNew == 0)
                {
                  echo $title;
                }
                //wenn titel länger als 10 zeichen veränderten titel ausgeben
                else
                {
                  echo $titleNew;
                }
              }
              //ausgabe des links für die Treffer
              echo "<li><a href='viewer.php?file=".$document."&search=".$search."#anker".$y."' target=\"MAIN_FRAME\">".$document."</a></li> ";
            }
            // nicht zusammengehörende themen splitten
            echo "<br>";
          }       
        }
        // Wenn $result Variable ungleich 1, dann Fehlermeldung ausgeben
        if ($result !== 1)
        {
          echo "<br><span style='color:red;'>Es wurden keine mit Ihrer Suchanfrage - <b>".$search."</b> - übereinstimmenden Dokumente gefunden.</span>";
        }
     }
  }
?>

schiese
 
Ich habs nun geschafft das es mit dem Code funktioniert den ich gerade nutze.
Ich hab dazu xampp neu installiert und aufeinmal geht es :suspekt:
Nun wollt ich ja nicht das das gleich ausgegeben wird sondern, dass es als Linknamen dient.
Ansatz war so:

PHP:
          $d=0;
          for($y=0;$y<count($array);$y++) 
          {   
          if ($search == $array[$y]) {
          $test[$d] = $array[$y-1]." ".$array[$y]." ".$array[$y+1];
          $d++;
          }
            if ( preg_match("/$search/i",$array[$y]) ) 
            {
              array_push($anzahl,$y);
            }
          }

und

PHP:
echo "<li><a href='viewer.php?file=".$document."&search=".$search."#anker".$y."' target=\"MAIN_FRAME\">".$test[$d]."</a></li> ";

Leider führte das zu
Notice: Undefined variable: test und Notice: Undefined offset: 1. Eine neue for-Schleife in der schon vorhandenen brachte den brwoser dazu das File ewig zu laden. Was ist der Denkfehler bei der Sache? Ich will einfach die Ergebnisse in nen Array speichern das ich dann ausgebe. Hab auch mal nen Bild angehängt wie die Ausgabe zz aussieht.

MfG
 
Vielleicht so?
PHP:
<?php
//---------------eigene Funktion------------------------------------------
//durchsucht eine htm Datei nach dem Anfangtag TITLE und dem Endtag /TITLE
//der Text dazwischen wird in $title gespeichert.

error_reporting(E_ALL);

  function getHTMLTitle($filename)
  {
    $f = fopen($filename, 'rb');
    $data = fread ($f, filesize ($filename));
    $title_start = strpos(strtoupper($data), '<TITLE>');
    if ($title_start)
    {
      $title_start += 7;
      $title_length = strpos(strtoupper($data), '</TITLE>');
      if ($title_length)
      {
         $title_length -= $title_start;
         return substr($data, $title_start, $title_length);
      }
      //else return 'FEHLER: TITEL Ende nicht gefunden';
      else return 'Titel unbekannt';
    }
    //else return 'FEHLER: TITEL Anfang nicht gefunden';
    else return 'Titel unbekannt';
  }
//---------------eigene Funktion------------------------------------------ 
  
  echo "Anzuzeigendes Thema ausw&auml;hlen: <br><br>";
  
// wenn kein Suchbegriff eingegeben wurde Skript abbrechen 
    if(!isset($_GET['s']))
    {    
     //abbrechen
     die();
    }
// wenn Suchbegriff eingegeben    
    else
    {
       // Überprüfung der Länge des Strings, wenn kleiner wie 2 dann Fehlermeldung
         if (strlen($_GET['s']) < 2)
       {
       echo "Bitte geben Sie mehr als 2 Zeichen ein!";
     }
     // Wenn Stringlänge OK ...
     else
     {   
           //hilfsvariable
          $result=0;
          $search = $_GET['s'];
        // dateinamen der html dateien einlesen
        foreach (glob('*.htm') as $document) 
        {           
          $array = array();
          $anzahl = array();
          
          //aktuellen Dokumentnamen übergeben
          $title = getHTMLTitle($document);
          //hilfsVariable
          $titleNew = 0;
          
          //wenn stringlänge von title länger als 10 dann ...
          if (strlen($title) > 10)
          {
            $punkte = '...';
            //ab dem ersten zeichen zählen und auf 10 zeichen kürzen
            $GekuerzterTitle = substr($title, 0, 26);
            //Punkte an gekürzten text anhängen
            $titleNew = $GekuerzterTitle.$punkte;
          }
          
          $content = strip_tags(file_get_contents($document));

          $array = explode(" ",$content);
          
          $vorkommen = array();
          for($y=0;$y<count($array);$y++) {
          
          if (!strcasecmp($array[$y],$search) ) {
            $test = $array[$y-1] . " " . $array[$y] . " " . $array[$y+1];
            array_push($vorkommen,$test);
          }
               
            if ( preg_match("/$search/i",$array[$y]) ) {
              array_push($anzahl,$y);
            }
          }
          //wenn anzahl nicht leer dann ...
          if(!empty($anzahl) ) 
          {
            //hilfsvariable
            $result=1;

            //Ankerpunkte für Treffer im Dokument hochzählen
            for($y=0;$y<count($anzahl);$y++) 
            {
              //wenn y kleiner wie 1 dann titel ausgeben, ansonsten nicht (Gruppierung)
              if ($y < 1)
              {
                //wenn titel nicht länger als 10 zeichen unveränderten titel ausgeben
                if ($titleNew == 0)
                {
                  echo $title;
                }
                //wenn titel länger als 10 zeichen veränderten titel ausgeben
                else
                {
                  echo $titleNew;
                }
              }
              //ausgabe des links für die Treffer
              echo "<li><a href='viewer.php?file=".$document."&search=".$search."#anker".$y."' target=\"MAIN_FRAME\">".$vorkommen[$y]."</a></li> ";
            }
            // nicht zusammengehörende themen splitten
            echo "<br>";
          }       
        }
        // Wenn $result Variable ungleich 1, dann Fehlermeldung ausgeben
        if ($result !== 1)
        {
          echo "<br><span style='color:red;'>Es wurden keine mit Ihrer Suchanfrage - <b>".$search."</b> - übereinstimmenden Dokumente gefunden.</span>";
        }
     }
  }
?>

schiese
 
Hallo schiese,
danke für deine Mithilfe. Leider funktioniert das auch nicht. Ich bekomme wieder...

-Notice: Undefined offset: 0
-Notice: Undefined offset: 1
-Notice: Undefined offset: 2
-Notice: Undefined offset: 3

Nur warum du sagst die Zeichenketten $array[$y] und $search sollen nicht verglichen werden versteh ich nicht so ganz?


MfG
 
Also bei mir gehts jetzt auch. Aber nur bei zb so einer Datei:

test.htm
Code:
Ein Baum hat Pflaumen

Wenn ich dann nach baum such, gibt er "Ein Baum hat" aus. Also wie bei dir.
Nur bei den Files die ich eigentlich durchsuchen will stoße ich auf Probleme.
Ich hab mal nen File wie ich sie habe hochgeladen. Kannst ja mal selber testen.


MfG
 

Anhänge

Ich mach des mal so wegen der Übersicht:

Also ich habe jetzt folgendes rausgefunden.
Vorweg:
Die htm Datei sieht so aus:
Code:
<html>
<head>
<title>testdatei</title>
</head>
<body>
Hallo das ist eine Testdatei. Ein baum hat Pflaumen.
</body>
</html>



Wenn der Code so aussieht:



PHP:
          $vorkommen = array();
          for($y=0;$y<count($array);$y++) {
          if (!strcasecmp($array[$y],$search) ) {
            $test = $array[$y-1] . " " . $array[$y] . " " . $array[$y+1];
            
            array_push($vorkommen,$test);
            //var_dump($test);
          }

und

PHP:
echo "<li><a href='viewer.php?file=".$document."&search=".$search."#anker".$y."' target=\"MAIN_FRAME\">".$vorkommen[$y]."</a></li> ";

Und ich suche zb nach "eine" oder "Testdatei" ist es kein Problem und ich bekomme alles wie ichs will dargestellt, nur sobald ich zb nach "hallo" suche, dann bekomm ich den Fehler: Notice: Undefined offset: 0. Ich denk mal das wird sein weil er in $array[$y-1] nichts finden kann.


Komisch ist aber wenn ich das ganze so mache (und auch nach "hallo" suche):

PHP:
          $vorkommen = array();
          for($y=0;$y<count($array);$y++) {
          if (!strcasecmp($array[$y],$search) ) {
            //$test = $array[$y-1] . " " . $array[$y] . " " . $array[$y+1];
            //$test = $array[$y-2] . " " . $array[$y-1] . " " . $array[$y];
            
            echo $array[$y-1]."<br>";
            echo $array[$y]."<br>";
            echo $array[$y+1];
            
            
            array_push($vorkommen,$test);
            //var_dump($test);
          }
               
            if ( preg_match("/$search/i",$array[$y]) ) {
              array_push($anzahl,$y);
            }
          }

Dann bekomm ich zwar keine Ausgabe aber auch keinen Error.
 
Das wird an deinem Array liegen. Du wirst da viele leere Elemente drinnen haben. Ich werde heute Abend mal gucken, hab eher leider keine Zeit.

schiese
 
Hi,

danke für deine Bemühungen. Ich hab mal probiert mit if (isset ... oder if (empty ... das ganze abzufragen. Leider klappt das nicht er geht dann nicht in die Schleife rein. Sowas zb meine ich:

PHP:
          if (empty($array[$y-1]))
          {
          $test = $array[$y] . " " . $array[$y+1];
          }


bzw

PHP:
          if (isset($array[$y-1]))
          {
          $test = $array[$y] . " " . $array[$y+1];
          }
 
Zurück