mit PHP preg_match prüfen ob mein Link noch vorhanden ist...

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

mit PHP preg_match prüfen ob mein Link noch vorhanden ist...

Beitragvon bruno » 29.04.2005 23:01

Hi Guys...
Mal sehen ob mir das Forum auch mal weiterhilft :wink:
Ist zwar kein mod_rewrite prob, hat aber auch was mit Internet zu tun :lol:

Hintergrund: Ich habe mir ein "automatisches Linktauschsystem" namens Linkman geholt und will nun fleissig Links tauschen :oops: (nicht hier, bei einem anderen projekt)

Also: installiert, ein wenig angepasst, und es melden sich also die ersten Linkpartner an. Das Script prüft nun automatisch, ob der Linkpartner einen Backlink zu meiner Seite gesetzt hat. Hier der Code:

Code: Alles auswählen
// START check()
function check() {
$lines=array();
global $settings;
$fp = fopen($settings['linkfile'],"rb") or die("Can't open the link file ($settings[linkfile]) for reading!");
$content=fread($fp,filesize($settings['linkfile']));
fclose($fp);
$content = trim(chop($content));
$lines = explode($settings['newline'],$content);
$site_url2 = preg_replace("/\//","\\\/",$settings['site_url']);

$i=1;
$found=0;
$rewrite=0;

echo <<<EOC
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<link rel="STYLESHEET" type="text/css" href="style.css">
<title>Checking reciprocal links...</title>
</head>
<body>
EOC;

foreach($lines as $thisline) {
    list($name,$email,$title,$url,$recurl,$description)=explode($settings['delimiter'],$thisline);

    echo "<p>Checking link N. <b>$i</b>...<br>\n";
    echo "Link URL: $url<br>\n";
       if ($recurl == "http://nolink")
        {
           echo "<b>No reciprocal link required!</b><br><br>\n";
            echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - -</p>\n";
            $i++;
          $found=0;
         flush();
            continue;
        }
        else
        {
           echo "Reciprocal URL: $recurl<br>\n";
        }
    echo "Opening and reading reciprocal URL ";

   $remote = @fopen($recurl, "r") or $remote = "NO";
       if ($remote == "NO") {echo "<br>\nERROR: CAN'T OPEN URL, PLEASE TRY LATER!<br><br>\n\n";}
        else
        {
         while ($html = fread($remote,1024)) {
              if (preg_match("/$site_url2/i",$html)) {$found=1; break;}
           echo ".";
          }

          if ($found==1) {echo "<br>\nA link to $settings[site_url] was found!<br><br>\n\n";}
           else {
                echo "<br>\nLINK NOT FOUND!<br><br>\n\nRemoving link ...<br>";
                unset($lines[$i-1]);
                $rewrite=1;
          }
        }
    $i++;
    echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - -</p>\n";
    $found=0;
    flush();
}

if ($rewrite == 1)
   {
   $lines = array_values($lines);
      $fp = fopen($settings['linkfile'],"wb") or die("Can't write to link file! Please Change the file permissions (CHMOD to 666 on UNIX machines!)");
      foreach ($lines as $thisline) {
          $thisline .= $settings['newline'];
         fputs($fp,$thisline);
      }
      fclose($fp);
   }

echo <<<EOC
<p>&nbsp;</p>
<p><b>DONE!</b></p>
<p><a href="lman.php?action=login&pass=$settings[apass]">Back to main page</a></p>
</body>
</html>
EOC;

exit();
}
// END check()


Die "fremde" URL wird also geöffnet, eingelessen und nach der URL meiner Seite durchsucht.

Code: Alles auswählen
         while ($html = fread($remote,1024)) {
              if (preg_match("/$site_url2/i",$html)) {$found=1; break;}


Und jetzt kommt das Problem, kaum hatten sich 5 Linkpartner angemeldet kennt natürlich schon einer nen "tollen Trick" - er schreibt meine URL einfach als Text auf seine Page, und das Script ist verarscht...

Meine Idee ist jetzt nach dem Vorkommen von <a href="http://www.meine-seite.de" zu suchen.

So, das probiere ich jetzt schon seit über ner Stunde, und kriegs einfach nicht hin, ständig PHP Fehler :oops:

Kann mir hier vielleicht jemand kurz unter die Arme greifen?

Gruß
bruno
bruno
Admin
Admin
 
Beiträge: 198
Registriert: 24.05.2004 14:44
Wohnort: nähe Nürnberg

Beitragvon Bailor » 30.04.2005 11:52

Hm also deine Idee finde ich nicht sonderlich gut, da bei <a href="http://www.meine-seite.de" z.B. folgende Möglichkeiten ausgeschlossen sind:
<a target="_blank" href="....
<a href = "http://...."
<a href='http://.....'
Und ich weis nicht ob es sinnvoll ist ALLE möglichkeiten zu überprüfen...

Zum Code:
Ich meine, folgendes müsste funktionieren:
Code: Alles auswählen
         while ($html = fread($remote,1024)) {
              $needle = '<a href="http://'.$site_url2.'" ';
              if (preg_match("/$needle/i",$html)) {$found=1; break;}

Da ich nicht genau weis, was in der $site_url2 steht, solltest du diese eventuell einmal ausgeben via echo... (in dem schritt kannst du dir auch gleich ansehn, wie die ursprüngliche url $settings['site_url'] aussieht).
$needle müsste oben halt entsprechend angepasst werden....

Tja, ich habs nicht getestet... wenn du soweit auch schon warst, poste doch mal die Fehlermeldungen... manchmal sind die ganz nützlich ;)
Bailor
.
.
 
Beiträge: 9
Registriert: 29.04.2005 16:30

Beitragvon ScreenDog » 09.05.2005 16:53

Isch habs nicht getestet, muss also evl. noch überarbeitet werden, aber ich meine so:

Code: Alles auswählen
$needle = '<a [^>]*href=[\'"]?http://'.$url.'[\'"]?(>| [^>]*>)'.$url.'</a>';


dürfte es auch die angesprochenen Möglichkeiten berücksichtigen

$url steht für www.domain.de

Was du übrigens auch noch für ein Problem hast ist,

link innerhalb von Kommentaren
link im Head-Teil usw.
ScreenDog
.
.
 
Beiträge: 6
Registriert: 06.05.2005 22:40

Beitragvon Chrissy_PHP » 17.05.2005 22:07

so gehts leider auch nicht @Screendog


Wenn dir aber <a href="http://www.meine-seite.de" zum checken reicht, dann musst du nur eine zeile hinzufügen:

$site_url2 = preq_quote($site_url2);

(vor dieser Zeile: if (preg_match("/$site_url2/i",$html)) {$found=1; break;})

Dadurch verschwinden die PHP Fehler.


Mit nem regulärem Ausruck kann ich dir leider nicht helfen, da ich davon zu wenig Ahnung habe :)
Bild
Chrissy_PHP
.
.
 
Beiträge: 14
Registriert: 23.03.2005 16:27


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste