Stephan: PHP-Quellcodes kombinieren

Hallo,

ich habe folgenden Code in meinem Buch kombiniert:

----

<?

$ja = '*ja*';
$nein = '*nein*';

function search4links($url, $fPtr)
{
static $urlBuffer;
if(isset($urlBuffer[$url])) return 0;
$urlBuffer[$url] = 1;

echo("Durchsuche $url<br>\n");
flush();
$meineSeite = @implode("", @file($url));
if(!$meineSeite) return 0;
$existing  = false

// Links suchen
preg_match_all("/\href=("|')(.*)(\1)/isU", $meineSeite, $ausgabe);
$anzahlLinks = 0;

foreach($ausgabe[2] as $link)
{
   if(preg_match("/(bildungszentrum-hyperkinetik.de|bz-h.de)/i", $link))
      $existing = true;
   if(!preg_match("/(http)/i", $link))
   {
      if(!$link[0] == "/")
      {
         if(!preg_match("/(http://.*)/(.*).(.*)$/siU", $url, $mUrl))
         {
            $anzahlLinks += search4links($url."/".$link);
         }
         else
         {
            $anzahlLinks += search4links($mUrl[1]."/".$link);
         }
      }
      else
      {
         preg_match("/(http://.*)//siU", $url, $mUrl);
         $anzahlLinks += search4links($mUrl[1]."/".$link, $fPtr);
      }

}

}

if($existing)
$query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

if($insert = @mysql_query("$query")) {
echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';

else

$query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($nein)."') WHERE adresse LIKE $url";

if($insert = @mysql_query("$query")) {
echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';

return $anzahlLinks;

}

if(isset($_POST[url]))
echo "\n\n<br><br>Links gefunden: ".search4links($_POST[url], fopen("$datei", "a");
);

?>

-----

und den Code habe ich getetstet. Allerdings habe ich jetzt versucht, ihn auf einer Frameseite zu testen (er soll die Links, die auf meine Seite gehen zählen, wenn da sind *ja* in die Tabelle schreiben, wenn nein *nein*.

Allerdings zählt er in einem Frameset und auf einer Seite nur die in einem Verzeichnis bzw. in einem Frameset liegenden Dateien, ich möchte aber, dass alle Dateien aufgerufen und gecheckt werden. Jetzt habe ich dazu folgenden Code gefunden:

-----

<?

// Verzeichnisse ausgeben

function echo_dirs($sDir)
{
   if(!$oDir = @dir($sDir))
   {
      echo("<i>Konnte das Verzeichnis $sDir nicht zum Lesen öffnen</i><br>\n");
      return;
   }

while(is_string($sFile = $oDir->read()))
   {
      if($sFile[0] == ".") continue;

if(is_dir($sDir.$sFile))
      {
         echo("<blockquote><b>$sFile</b><br>\n");
         echo_dirs($sDir.$sFile."/");
         echo("</blockquote>\n");
      }
      else
      {
         echo("$sFile<br>");
      }
   }
}

echo_dirs("./");

?>

-----

Nun habe ich aber keine Ahnung, wie ich das kombinieren kann. Wäre euch sehr dankbar, wenn ihr mir helfen könntet...

Danke schon jetzt *vordemquellcodeverzweifel*

Stephan

  1. Hallo,

    Nun habe ich aber keine Ahnung, wie ich das kombinieren kann. Wäre euch sehr dankbar, wenn ihr mir helfen könntet...

    Ich glaube das Studium von http://at2.php.net/manual/en/ref.dir.php bzw. http://at2.php.net/manual/en/class.dir.php müsste dir den fremden Code verstehen helfen.

    gruß,
    Severin

    --
    Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
    --Philip K. Dick
    1. OK, das erklärt, wie ich alles auslese...

      Aber ich stehe eher vor dem problem, dass ich nicht weiss, wo ich das einbinden muss, dass er es auch berücksichtigt...

      Stephan

      1. Hallo, mir ist gerade ein Blitzgedanke gekommen, geht das so:?

        <?

        $ja = '*ja*';
        $nein = '*nein*';

        // Verzeichnisse ausgeben

        function echo_dirs($sDir)
        {
           if(!$oDir = @dir($sDir))
           {
              echo("<i>Konnte das Verzeichnis $sDir nicht zum Lesen öffnen</i><br>\n");
              return;
           }

        while(is_string($sFile = $oDir->read()))
           {
              if($sFile[0] == ".") continue;

        if(is_dir($sDir.$sFile))
              {

        function search4links($url, $fPtr)
        {
        static $urlBuffer;
        if(isset($urlBuffer[$url])) return 0;
        $urlBuffer[$url] = 1;

        echo("Durchsuche $url<br>\n");
        flush();
        $meineSeite = @implode("", @file($url));
        if(!$meineSeite) return 0;
        $existing  = false

        // Links suchen
        preg_match_all("/\href=("|')(.*)(\1)/isU", $meineSeite, $ausgabe);
        $anzahlLinks = 0;

        foreach($ausgabe[2] as $link)
        {
           if(preg_match("/(bildungszentrum-hyperkinetik.de|bz-h.de)/i", $link))
              $existing = true;
           if(!preg_match("/(http)/i", $link))
           {
              if(!$link[0] == "/")
              {
                 if(!preg_match("/(http://.*)/(.*).(.*)$/siU", $url, $mUrl))
                 {
                    $anzahlLinks += search4links($url."/".$link);
                 }
                 else
                 {
                    $anzahlLinks += search4links($mUrl[1]."/".$link);
                 }
              }
              else
              {
                 preg_match("/(http://.*)//siU", $url, $mUrl);
                 $anzahlLinks += search4links($mUrl[1]."/".$link, $fPtr);
              }

        }

        }

        if($existing)
        $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($ja)."') WHERE adresse LIKE $url";

        if($insert = @mysql_query("$query")) {
        echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';

        else

        $query = "UPDATE parnter (check) VALUES ('".mysql_escape_string ($nein)."') WHERE adresse LIKE $url";

        if($insert = @mysql_query("$query")) {
        echo '<p align="center"><b>Abfrage erfolgreich</b><br><br><a href="organizer.php"><- zurück</a></p>';

        return $anzahlLinks;

        }

        if(isset($_POST[url]))
        echo "\n\n<br><br>Links gefunden: ".search4links($_POST[url], fopen("$datei", "a");
        );

        }
              else
              {
                 echo("$sFile<br>");
              }
           }
        }

        echo_dirs("./");

        ?>

        ich habe das jetzt einfach darumgesetzt...

        Stephan *hoffdassrichtig*

        1. Hallo,

          Hallo, mir ist gerade ein Blitzgedanke gekommen, geht das so:?

          Das kann ich dir nicht sagen. Es liegt an dir den Code  einzubauen, zu schaun ob er tut was er tun soll, oder ob er Fehlermeldungen ausgibt. Ich kann (leider) beim besten Willen keinen Code einfach so vom Blatt debuggen. Geht das finden von Tippfehlern oder vergessenen Anführungszeichen noch so halbwegs, ist das finden von Logikfehlern oder falschen Ergebnissen ohne ausgiebiges Testen schlicht nicht möglich.

          gruß,
          Severin

          --
          Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
          --Philip K. Dick
          1. OK, ein paar kleine Fehler sind weg, nur jetzt sagt er mir:

            Parse error: parse error in /var/www/web742/html/linkadmin2003/iframe/check.php on line 97

            Aber line 97 ist

            93:if(isset($_POST[url]))
            94:echo "\n\n<br><br>Links gefunden: ".search4links($_POST[url]);
            95:
            96:}
            97:      else
            98:      {
            99:         echo("$sFile<br>");
            00:      }
            01:   }
            02:}
            03:
            04:echo_dirs("./");
            05:
            06:?>

            Wo liegt der Fehler? Bei den 100-ern nummern habe ich die 1 weggelassen, dann ist es übersichtlicher...

            Danke schon jetzt

            Stephan

            1. Hallo,

              Parse error: parse error in /var/www/web742/html/linkadmin2003/iframe/check.php on line 97

              93:if(isset($_POST[url]))
              94:echo "\n\n<br><br>Links gefunden: ".search4links($_POST[url]);
              95:
              96:}

              Die Klammer in Zeile 96 schließt keine Klammer. Du müsstest in Zeile 93 if(isset($_POST['url'])){ schreiben. Außerdem solltest du die Keys von Arrays unter Anführungszeichen setzen. Siehe auch [pref:t=65183&m=371053].

              gruß,
              Severin

              --
              Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
              --Philip K. Dick
              1. Hallo,

                er sagt mir jetzt, bei meinem ?> sein ein fehler, heisst das jetzt, ich muss noch eine Klammer zumachen, oder auflassen?

                Stephan

                1. Hallo,

                  er sagt mir jetzt, bei meinem ?> sein ein fehler, heisst das jetzt, ich muss noch eine Klammer zumachen, oder auflassen?

                  Das ist schon wieder eine Frage, die ich ohne den gesamten Code und den Fehler zu kennen, nicht beantworten kann. Ich würde vorschlagen, dass du alle deine Klammern überprüfst, und auch einen Editor mit gescheitem Syntax-Highlighting, und Markierung der Klammern nimmst.

                  Und wenn alles nichts hilft, probierst du halt beide Varianten aus ;)

                  gruß,
                  Severin

                  --
                  Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
                  --Philip K. Dick