Problem mit Linkverfolgung !!! Hilfe !!!

Begonnen von zeusianer, 20. Juli 2005, 15:03:19

Vorheriges Thema - Nächstes Thema

zeusianer

Hallo werte Gemeinde,
mal wieder habe ich ein Problem und brauche eure Hilfe.
Ich habe eine Art Spider in PHP geschrieben die automatisch alle links innerhalb einer Domain verfolgt und ausliest um Sie in einer Datenbank zu Speichern (Fast ne kleine SuMa).
Nun habe ich folgendes Prob:
Bei einigen Links ( z.B. http://www.code-box.de/download.php?id=28&s=download\" rel=\"external nofollow\">http://www.code-box.de/download.php?id=28&s=download ) wird ein Automatischer Download gestartet und die berümte abfrage ( Öffenen / Speichern / Abbrechen ) erscheint. Die ersten 10 solcher Links verkraftet das Script, dann bleibt es hängen. Ausgelesen werden die Daten mit $content = implode(\"\", file($url));
Wie kann ich nun vor dem auslesen erkennen ob der Link einen Download startet ? Habe es schon mit phpLinkCheck ( http://www.php-faq.de/q/q-code-links-testen.html\" rel=\"external nofollow\">http://www.php-faq.de/q/q-code-links-testen.html ) versucht dieses erkennt das aber nicht.
Weis jemand ABHILFE ?
Vielen Dank schonmal im vorraus für die Hilfe.
MfG

Powie

ich habe jetzt sofort da keine Lösung, nur die Idee dazu. Jede HTTP Verbindung liefert dir am Anfang einen Header mit einem Content Type. Den solltest du auswerten und nur dann weitermachen wenn es sich um ein HTML File handelt.

zeusianer

Das habe ich Ja mit dem Script phpLinkCheck versucht. das Dokument ist vorhanden leitet aber auf den download weiter die anfrage wird allso mit HTTP-Code 200 beantwortet.
Danke für den versuch

Powie

Status Code, also 200, 404, 403 oder ähnliches ist nicht was ich meine, sondern den Content Type , da steht sowas :
TXT/HTML
PDF/bla
etc. etc.

sunny

Spontan finde ich bei php.net in der function list:
http://de.php.net/manual/en/function.mime-content-type.php\" rel=\"external nofollow\">mime_content_type() - kann man damit was anfangen? oO

*********************************


Da Sunny /uploads/emoticons/icon_e_biggrin.gif.1a84f5257b36e14b36d04985314f877f.gif\" alt=\":-D\">


zeusianer

Habe es mit folgendem Script versucht :
 
 
  *  Date:    2001-04-14
  *  Version: 0.1 (currently requires PHP4)
  */
 
 $url = trim($url);
 if (!preg_match(\"=://=\", $url)) $url = \"http://$url\";
 $url = parse_url($url);
 if (strtolower($url[\"scheme\"]) != \"http\") return FALSE;
 
 if (!isset($url[\"port\"])) $url[\"port\"] = 80;
 if (!isset($url[\"path\"])) $url[\"path\"] = \"/\";
 
 $fp = fsockopen($url[\"host\"], $url[\"port\"], &$errno, &$errstr, 30);
 
 if (!$fp) return FALSE;
 else
 {
   $head = \"\";
   $httpRequest = \"HEAD \". $url[\"path\"] .\" HTTP/1.1\\r\\n\"
                 .\"Host: \". $url[\"host\"] .\"\\r\\n\"
                 .\"Connection: close\\r\\n\\r\\n\";
   fputs($fp, $httpRequest);
   while(!feof($fp)) $head .= fgets($fp, 1024);
   fclose($fp);
 
   preg_match(\"=^(HTTP/\\d+\\.\\d+) (\\d{3}) ([^\\r\\n]*)=\", $head, $matches);
   $http[\"Status-Line\"] = $matches[0];
   $http[\"HTTP-Version\"] = $matches[1];
   $http[\"Status-Code\"] = $matches[2];
   $http[\"Reason-Phrase\"] = $matches[3];
 
   if ($r) return $http[\"Status-Code\"];
 
   $rclass = array(\"Informational\", \"Success\",
                   \"Redirection\", \"Client Error\",
                   \"Server Error\");
   $http[\"Response-Class\"] = $rclass[$http[\"Status-Code\"][0] - 1];
 
   preg_match_all(\"=^(.+): ([^\\r\\n]*)=m\", $head, $matches, PREG_SET_ORDER);
   foreach($matches as $line) $http[$line[1]] = $line[2];
 
   if ($http[\"Status-Code\"][0] == 3)
     $http[\"Location-Status-Code\"] = phpLinkCheck($http[\"Location\"], TRUE);
 
   return $http;
 }
}
 
$test=phpLinkCheck(\"http://www.code-box.de/download.php?id=28&s=download\");
 
print_r($test);
 
?>

 
Heraus kommt : Content-Type => text/html.
Wenn man aber die URL im browser aufruft kommt die downloadanfrage und bei dieser oder einer anderen adresse die den selben effeckt hat bleibt das Script hängen.
Auch mime-Typ liefert dieses ergebniss.
 - Editiert von Zeusianer am 20.07.2005, 18:25 -

all your base are belong to us / Discord