PHP-Quellcodes kombinieren
Stephan
- php
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
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
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
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*
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
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
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
Hallo,
er sagt mir jetzt, bei meinem ?> sein ein fehler, heisst das jetzt, ich muss noch eine Klammer zumachen, oder auflassen?
Stephan
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