links auf verfügbarkeit prüfen.

hi,
ich hab wieder ein problem, wobei ich eure unterstützung gebrauchen könnte..

Und zwar muss ich per php links (welche in einer MySQL-Tablle gespeichert sind) überprüfen, ob mp3 dateien dahinter noch verfügbar sind.

Ich hab mir das in etwa so gedacht, dass ich die adresse öffne (fopen) und aus der datei einen md5 hash oder ähnliches bilde. und dieser hash wird mit dem hash in der datenbank verglichen. (dieser hash muss halt beim eintragen des links einmal erstellt werden).

Na jedenfalls erzeugt das ne menge traffik, und n haufen ladezeit für den besucher.
Jedenfalls gibt es ja im HTTP-Protokoll nun die möglichkeit NUR den Header abzufragen (wenn ich auch noch nicht ganz rausbekommen hab, wie ich da vorgehen muss, aber das bekomm ich noch hin!).

Dazu aber wieder folgende überlegungen, was ist, wenn diese datei nur per FTP zur verfügung gestellt wird?
Und wie kann man im falle des http-protokolls die datei als eizigartig identifizieren.

Zum identifizieren, wird meinen informationen nach einmal die gesamtlänge des dokuments im header angegeben, und dann gibt es noch den eTag.
Ist das zuverlässig, oder kann man da von irgendwelchen unregelmäßigkeiten ausgehen, die z.B. der cache einbringt?
 
Wenn du nur auf existenz der Datein prüfen möchtest hilft dir dieser Thread sicher weiter. ;)
 
Danke, das hilft mir etwas, aber ich will sicherstellen, dass es sich tatsächlich immernoch um die datei handelt, die damals im system verlinkt wurde.
 
Also ich habs jetzt mal über den eTag gelöst.. hoffe das das auch wirklich geht. Konnte mir ja leider niemend beantworten, durch welche einflüsse sich dieser Fingerprint verändern würde.

PHP:
function verify_link($url, $eTag) {
$host= parse_url($url);

$fp = @fsockopen($host['host'], 80, &$errno, &$errstr, 10); //open connection
 if(!$fp) return false;
 else { //if connection
 fputs($fp,"HEAD $url HTTP/1.0\r\nUser-Agent: Mozilla\r\n\r\n");
 while(!feof($fp)) {
 $header .= fgets($fp);
 }
 fclose($fp); //close connection
 print($header);
 $new_etag = str_cutout($header, "ETag: \"", "\"");
 if ($new_etag == $etag) return true;
 else return false;
}

es werden die URL und der bei der eingabe erstellte eTag übergeben, der header abgerufen, und mittels meiner selbst erstellten funktion str_cutout der eTag extrahiert.
 
Zurück
Oben