Herzlich willkommen im Archiv vom ABAKUS Online Marketing Forum
Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.
Code: Alles auswählen
$client = new Snoopy();
$client->agent = 'MeinHTTPClient;
$client->read_timeout = 20; // bei proxies hoeher
$client->use_gzip = false;
@$client->fetch($url);
Code: Alles auswählen
if ($fp = fsockopen ('www.google.com', 80, $errno, $errstr, 30)) {
fputs ($fp, "GET /webmasters/sitemaps/ping?sitemap=http://example.com/map.xml HTTP/1.0\r\n\r\n");
fputs($fp, "Host: www.google.com\r\n");
fputs($fp, "Connection: close\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp,128);
}
fclose($fp);
}
Den Statuscode kann man auch relativ leicht ermitteln und ein Redirect ist jetzt auch nicht so die Hürde. Ich hab hier mal schnell eine Funktion dafür zusammengezimmert:Bauchladen hat geschrieben:Solange es keine Redirects gibt und man keine HTTP Fehlercodes braucht.
Code: Alles auswählen
function get_url($url, &$http_status, $count = 1) {
$url_parts = parse_url($url);
$port = (isset($url_parts['port'])) ? $url_parts['port'] : 80;
$query = (isset($url_parts['query'])) ? '?'.$url_parts['query'] : '';
if ($fp = @fsockopen($url_parts['host'], $port, $errno, $errstr, 30)) {
fputs($fp, 'GET '.$url_parts['path'].$query." HTTP/1.0\r\n");
fputs($fp, 'Host: '.$url_parts['host']."\r\n");
fputs($fp, "User-Agent: PHP\r\n");
fputs($fp, "Connection: close\r\n\r\n");
$in_body = FALSE;
$body = '';
while (!feof($fp)) {
$line = fgets($fp, 128);
if ($in_body) {
$body .= $line;
} elseif (preg_match('=HTTP/1\.[1|0]\s([0-9]{3})=si', $line, $match)) {
$http_status = $match[1];
} elseif (preg_match('=Location:(.*)=si', $line, $match)) {
$http_location = trim($match[1]);
} elseif ($line == "\r\n") {
$in_body = TRUE;
}
}
fclose($fp);
if (in_array($http_status, array(301, 302, 303, 307))) {
if ($count > 20) {
print('Fehler: Redirect Limit überschritten');
return FALSE;
} elseif (!empty($http_location)) {
return get_url($http_location, $http_status, $count+1);
}
} elseif (in_array($http_status, array(200, 201, 202, 204, 205))) {
return $body;
} else {
return FALSE;
}
} else {
$http_status = -1;
return FALSE;
}
}
if ($content = get_url('http://w3.org/', $status)) {
print($content);
} else {
print('Fehler: '.$status);
}
Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung.Bauchladen hat geschrieben:Irgendwann wundert man sich dann warum das Skript nicht mehr geht und merkt dann 3 Threads und 7 Tage später dass man das doch gleich von Anfang an richtig hätte machen sollen.
Wow klasse. Warum auch bereits getesteten und probaten Code (der zudem nahezu 100% Standard konform ist) Reusen wenn man sich schnell mal eben selbst einen Strick knüpfen kann. Dein Kunde möchte ich echt nicht sein. Sorry, aber du bist für mich ein Frickler und Eigenbrötler.Babelfisch hat geschrieben: Den Statuscode kann man auch relativ leicht ermitteln und ein Redirect ist jetzt auch nicht so die Hürde. Ich hab hier mal schnell eine Funktion dafür zusammengezimmert:Ist jetzt nicht groß getestet, sollte aber eigentlich funktionieren.Code: Alles auswählen
function get_url($url, &$http_status, $count = 1) { ...
Wäre ein Einzeiler .. merkst du den Unterschied ?Babelfisch hat geschrieben:Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung.Bauchladen hat geschrieben:Irgendwann wundert man sich dann warum das Skript nicht mehr geht und merkt dann 3 Threads und 7 Tage später dass man das doch gleich von Anfang an richtig hätte machen sollen.
Was du von mir hälst, ist mir eigentlich ziemlich egal und meine Kunden haben sich auch noch nie darüber beschwert, dass ich weiß, was ich programmiere.Bauchladen hat geschrieben:Wow klasse. Warum auch bereits getesteten und probaten Code (der zudem nahezu 100% Standard Konform ist) Reusen wenn man sich schnell mal eben selbst einen Strick knüpfen kann. Dein Kunde möchte ich echt nicht sein. Sorry, aber du bist für mich ein Frickler und Eigenbrötler.
Tja, ein Einzeiler ohne Fehlerüberprüfung. Wie tobsn schon schrieb, hätte dafür auch readfile() oder file() augereicht. Wie war das gleich noch mal mit den Kanonen und den Spatzen?Babelfisch hat geschrieben:Dann fehlt in deinem Beispiel aber auch noch eine rudimentäre Fehlerüberprüfung.
Bauchladen hat geschrieben:Ist ein Einzeiler .. merkst du den Unterschied ?
Die Fehlerprüfung ist ein Einzeiler. Und was deine Qualifikation angeht, was meinst du warum die BigProjects der Szene auf Snoopy setzen statt das Rad nochmal neu zu erfinden ?Babelfisch hat geschrieben: Tja, ein Einzeiler ohne Fehlerüberprüfung. Wie tobsn schon schrieb, hätte dafür auch readfile() oder file() augereicht. Wie war das gleich noch mal mit den Kanonen und den Spatzen?
Ja natürlich ist das nur ein Einzeiler, genau wie bei meiner Funktion. Nur hast du in deinem Beispiel halt keine Fehlerüberprüfung gemacht.Bauchladen hat geschrieben:Die Fehlerprüfung ist ein Einzeiler.
Die "BigProjects", da bin ich ja jetzt extrem beeindruckt.Bauchladen hat geschrieben:Und was deine Qualifikation angeht, was meinst du warum die BigProjects der Szene auf Snoopy setzen statt das Rad nochmal neu zu erfinden ?