Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> Die Funktion gethostbyaddr() ist sehr langsam!, Habt Ihr das auch schon bemerkt?
webdoktor
G-Design Websolutions
Geschrieben am: Do 25.10.2007, 16:22
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 494
Mitglied seit: 16.12.2005


Hallo zusammen

Ich habe eine eigene kleine Statistk individuell für mich programmiert.
Dort ermittle ich den Hostname des Users anhand der IP mit dem Befehl:

gethostbyaddr ()

Nun funktionierte die Statistik zwar einwandfrei, es ging aber immer 30
Sekunden bis die Seite geladen war bei etwa 300 Benutzer d.h. 300 IP
Adressen welche es abfragen musst.

Sobald ich den Befehl gethostbyaddr() entfernt habe geht es einwandfrei
innert Millisekunden.

Ist das ein generelles Problem dieser Funktion? Gibt es evt. eine alternative?

Freue mich über Eure Antworten.

PS:"Mir ist klar, dass es etwas Zeitbraucht anhand der IP den Hostname ausfindig
zu machen - aber gerade 30 Sekunden...?!"

Marco
Top
PMEmail PosterUsers Website
Top
 
 
gregi
#2 Geschrieben am: Do 25.10.2007, 16:44 (+00:21)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 59
Mitglied seit: 22.03.2006


Ich gehe davon aus, dass es um eine Statistik des Webserver-Logfiles o.ä. geht.

Weshalb fragst du die Hostnamen erst bei der Auswertung ab?
Ich würde vorschlagen bei jedem Besuchen der Webeite den Hostnamen gleich abzufragen und in einer Datenbank zu speichern.
Für die Statistik musst du dann nur noch die Datenbank abfragen.
Top
PMEmail Poster
Top
 
profo
#3 Geschrieben am: Do 25.10.2007, 16:49 (+00:04)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 242
Mitglied seit: 19.01.2007


gethostbyaddr() ist ja keine reine PHP-Funktion. Um eine IP-Adresse nachzuschlagen, muss gethostbyaddr() Nameserver abfragen, und das kann natürlich dauern. Falls Du die Adressen brauchst solltest Du es machen, wie gregi vorschlägt. Einfach zu geeigneter Zeit in eine Datenbank schreiben und dann dort auslesen. (Nur dran denken, dass sich die Einträge im Laufe der Zeit ändern)


--------------------
Forenverzeichnis, Blogverzeichnis und Wikiverzeichnis ohne Backlinkfplicht
E-Mail mit mailde.de - Einfach E-Mail!
beziehungs-kiste.net - Das Tratschforum für Singles, Paare und Familien
Top
PMEmail PosterUsers Website
Top
 
webdoktor
G-Design Websolutions
#4 Geschrieben am: Do 25.10.2007, 18:57 (+02:08)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 494
Mitglied seit: 16.12.2005


Hey zusammen

genau, das ist ein super Tipp werde es wärend des Zugriffes
machen und nicht nachträglich. Wobei dann dauert es aber auch
einwenig länger und der User hat ganz kleine Verzögerungen.

Hmm?

Marco
Top
PMEmail PosterUsers Website
Top
 
sd12
#5 Geschrieben am: Do 25.10.2007, 19:07 (+00:09)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 3574
Mitglied seit: 3.03.2004


QUOTE (webdoktor @ Do 25.10.2007, 19:57)
Wobei dann dauert es aber auch
einwenig länger und der User hat ganz kleine Verzögerungen.

Mach es am Ende der HTML Ausgabe....

Dann ist die Seite komplett geladen und dem User kann es egal sein, wenn Dein Script noch 2 Sekunden braucht...

echo"</html>";
gethostbyaddr();
?>


--------------------
************************
Treiber f[r das Kezboard ist [berfl[ssig.
Top
PMEmail PosterICQMSN
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#6 Geschrieben am: Do 25.10.2007, 19:12 (+00:05)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2206
Mitglied seit: 4.02.2006


Na ja, 30 Sekunden für 300 Adressen geht doch noch. Das sind 10 Adressen pro Sekunde.

Ich hatte auf einem lokalen Rechner schon das Problem, daß das Abfragen einer IP-Adresse bis zu 8 Sekunden brauchte. Schließlich stellte sich heraus, daß mehrere, von der FRITZ-Card erzeugte Netzwerkkarten der Reihe nach abgefragt wurden: Die erste fand nix, weil die IP-Adresse in keinem Nameserver drin war, also wurde die zweite abgefragt - dasselbe Spielchen.

Im Augenblick ist bei dir unsichtbar, ob 10 Adressen pro Sekunde bewältigt werden oder ob bsp. die Hälfte der Adressen schon gecacht / bekannt sind und der Rest umso länger braucht. Allerdings muß man normalerweise bei NS-Abfragen bis zu 2 Sekunden einplanen - nix für den Turbo.

In .NET wäre mein Vorschlag: Starte einen Hintergrundthread, der die IP-Adresse auflöst, dann kann die Seitenverarbeitung weiterlaufen. In PHP könnte vielleicht ein Script aufgerufen werden, ohne daß auf dessen Ende gewartet wird (weiß nicht, ob PHP das unterstützt).


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
David T.
#7 Geschrieben am: Fr 26.10.2007, 15:25 (+20:12)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 110
Mitglied seit: 30.07.2006


gethostbyaddr() ist eine sehr, sehr langsame PHP-Funktion. Leider gibt es keine wirklich schnellere Alternative. Einzig die Funktion dns_get_record ist geringfügig schneller (rentiert sich eigentlich nur bei Massenabfragen, wie sie z.B. in Logparsern vorkommen).

CODE

<?php
/**
* This functions tries to resolve the IPv4 address for a hostname. It uses PHP's dns_get_record()
* because in my benchmarks this function was faster than gethostbyname. However, dns_get_record()
* does not work on Windows nor *BSD, so a fallback to gethostbyname() is implemented.
*
* @param  integer $domain: The domain.
* @return mixed: The IPv4 address or false if the query failed.
*/
$operating_system = strtolower(php_uname('s'));
if(strpos($operating_system, 'windows') !== false || strpos($operating_system, 'bsd') !== false) {
function resolve_ipv4($domain) {
 $bad_ip_addresses = array(
  '206.112.100.132', // http://slashdot.org/article.pl?sid=07/02/15/0432259
  '208.67.219.40', '208.67.219.41', '208.69.32.130' // http://www.opendns.com/faq/#do_you_wildcard_domains
 );
 $ip_address = gethostbyname($domain);
 if($ip_address != $domain && !in_array($ip_address, $bad_ip_addresses)) {
  return $ip_address;
 } else {
  return false;
 }
}
} else {
function resolve_ipv4($domain) {
 $bad_ip_addresses = array(
  '206.112.100.132', // http://slashdot.org/article.pl?sid=07/02/15/0432259
  '208.67.219.40', '208.67.219.41', '208.69.32.130' // http://www.opendns.com/faq/#do_you_wildcard_domains
 );
 $dns_data = @dns_get_record($domain, DNS_A);
 if(is_array($dns_data) && array_key_exists(0, $dns_data) && !in_array($dns_data[0]['ip'], $bad_ip_addresses)) {
  return $dns_data[0]['ip'];
 } else {
  return false;
 }
}
}
?>


--------------------
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/21320

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Sehr unzufrieden mit Google Adwords PH 114 1 Mo 1.09.2008, 07:49
Internet langsam? PH 291 11 Do 21.08.2008, 08:36
Mapping mit Redirect-Funktion FloHoCH 152 2 Mi 25.06.2008, 21:28
Array in Funktion übernehmen radarin 254 3 Mo 16.06.2008, 22:56
Suche Europakarte mit Funktion ? japsa 117 0 Fr 25.04.2008, 19:39
php Funktion:Urls auslesen Sancheck 469 7 Mo 31.03.2008, 07:11
[S] Sehr gute IDE nitrit 343 9 Di 4.03.2008, 19:40
Amazon und Co. nerven mich langsam.... Toblerone 197 1 Di 4.03.2008, 09:37




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]