auf was wartet PHP ...
Rolf
- php
0 suit0 Christoph Jeschke
Hallo,
auf Wunsch habe ich im Intranet PHP von Version 5.1. auf 5.2. aktualisiert.
Zur Navigation werden hier oft nachfolgende Konstrukte verwendet:
<?php
header('Location: http://new.gint.edc/ztst/');
exit;
?>
Unter PHP/5.1. erfolgte die Weiterleitung verzögerungsfrei.
Unter PHP 5.2. verstreichen erst ca. 5-6 Sekunden und dann passiert etwas.
Fragen:
Worauf kann man diese Verzögerung zurückführen?
Wie lässt sich der Bug beheben?
Alle PC's haben WinXP und eine HOSTS-Datei um lokale Domains aufzulösen.
m.b.G. Rolf
Worauf kann man diese Verzögerung zurückführen?
Wie lässt sich der Bug beheben?
<?php
header('Location: http://new.gint.edc/ztst/');
echo ' ';
exit;
?>
Versuch mal vor dem exit; ein echo reinpacken (wichtig ist, dass es irgendwas "ausgibt").
Hört sich zwar jetzt komisch an, hat aber bei mir funktioniert. Nach Umstieg von PHP 4.4 auf PHP 5.2: plötzlich gingen sämtliche redirects nicht mehr ordentlich. Einige haben überhaupt nicht reagiert (es wurde einfach 200 OK ausgeliefert) und andere haben enorm zeitverzögert weitergeleitet. Um zu prüfen, ob ich mich selbst verarsche (vonwegen richtiges Script, richtiger Server), hab' ich die Weiterleitung durch echo 'hello world';
ersetzt und nach erfolgreicher Prüfung (ich war im richtigen Script) hab' ich den Redirect wieder eingebaut (ohne das echo
zu entfernen). Danach hats einwandfrei funktioniert, kaum war das echo entfernt, hats wieder nicht mehr funktioniert - lediglich ein 200 OK mit dem "üblichen Inhalt der nach dem exit; im Dokument stand oder eben eine "zeitverzögerte" Umleitung.
Hi,
Hört sich zwar jetzt komisch an, ...
Hätte da auch noch was anzubieten, auch ohne Begründung:
header('Location: http://new.gint.edc/ztst/');die('xxx');
Hans
Hallo Suit,
Versuch mal vor dem exit; ein echo reinpacken (wichtig ist, dass es irgendwas "ausgibt").
okay,
<?php
header('Location: http://new.gint.edc/ztst/');
echo '*';
exit;
?>
Bringt gar nix, ausser dass nach 6 Secunden das Sternchen zu sehen ist,
wenn man die header()-Funktion auskommentiert ... :-(
Werde jetzt auf 5.2.8 upgraden und melde mich dann wieder ...
m.b.G. Rolf
Hallo Suit,
das Update hat geklappt und dies steht im access.log des Apache:
192.168.2.20 - - [11/Feb/2009:11:25:34 +0100] "GET /go.gint.new.php HTTP/1.1" 302 -
192.168.2.20 - - [11/Feb/2009:11:25:39 +0100] "GET /conf/npf/ HTTP/1.1" 200 7809
Es dauert also exakt 5 Sekunden vom Aufruf des link-Scriptes bis zum Aufruf der Zielseite.
IMHO kann das nur an PHP liegen, was anderes hat sich ja nicht verändert.
Sorry - das verstehe ich nun wirklich nicht mehr ... :-((
m.b.G. Rolf
Hi,
Sorry - das verstehe ich nun wirklich nicht mehr ... :-((
hast du auch schon einen Test gemacht mit anderen (bekannten)URLs zb. Google usw...?
Hans
Hallo Hans,
»» Sorry - das verstehe ich nun wirklich nicht mehr ... :-((
hast du auch schon einen Test gemacht mit anderen (bekannten)URLs zb. Google usw...?
natürlich,
da tritt eine solche Totzeit nicht auf.
Normalerweise würde ich daraus schliessen, dass PHP die lokale HOSTS nicht priorisiert, wie das üblich ist, sondern erst in der HOSTS nachschaut, wenn es die Domain auf dem verwendeten Nameserver nicht findet. Offensichtlich wird auch der DNS-Cache nicht verwendet, weil die 5 Sekunden bei jedem Aufruf der header()-Funktion mit einer lokalen URL auftreten. Normalwerweise sollten nachfolgende Aufrufe der gleichen URL deutlich fixer ablaufen, was sie jedoch nicht tun. Das ist sowieso alles sehr mysteriös. So wie es ausschaut, wird der DNS-Lookup des Systems komplett ignoriert.
m.b.G. Rolf
Hi,
Normalerweise würde ich daraus schliessen, dass PHP die lokale HOSTS nicht priorisiert, wie das üblich ist, sondern erst in der HOSTS nachschaut, wenn es die Domain auf dem verwendeten Nameserver nicht findet. Offensichtlich wird auch der DNS-Cache nicht verwendet, weil die 5 Sekunden bei jedem Aufruf der header()-Funktion mit einer lokalen URL auftreten.
Normalerweise wuerde ich daraus schliessen, dass dir nicht klar ist, was du eigentlich tust bzw. was dabei vorgeht.
PHP interessiert sich fuer das DNS einen feuchten Kehrricht.
Der Location-Header ist eine Ansage an den Client, sich die Daten doch bitteschoen von einer anderen Adresse zu besorgen.
Wenn also jemand diese Adresse zwecks Aufloesung ans DNS zu uebergeben hat, dann der Client.
MfG ChrisB
Hallo Chris,
PHP interessiert sich fuer das DNS einen feuchten Kehrricht.
okay,
was ist es dann ... ?
Der Location-Header ist eine Ansage an den Client, sich die
Daten doch bitteschoen von einer anderen Adresse zu besorgen.
Wenn also jemand diese Adresse zwecks Aufloesung ans DNS zu
uebergeben hat, dann der Client.
hmm,
die Browser wurden nicht verändert, _nur_ PHP von 5.2.5 auf 5.2.8.
Aber wie _und_ warum hält PHP die Meldung an den Browser zurück?
m.b.G. Rolf
你好 Rolf,
Aber wie _und_ warum hält PHP die Meldung an den Browser zurück?
Debugge doch mal mit z. B. curl -I. Da kannst du doch viel besser feststellen, was eigentlich passiert.
再见,
克里斯蒂安
Debugge doch mal mit z. B. curl -I. Da kannst du doch viel besser feststellen, was eigentlich passiert.
hmm,
gibt es das auch in deutsch und für Windoof ohne Compiler ... ?
Hatte gehofft jemand weiss hier was.
Auf die nächste PHP-Version hoffen geht auch ohne grossen Aufwand.
m.b.G. Rolf
你好 Rolf,
Debugge doch mal mit z. B. curl -I. Da kannst du doch viel besser feststellen, was eigentlich passiert.
hmm,
gibt es das auch in deutsch und für Windoof ohne Compiler ... ?
http://curl.haxx.se/download/curl-7.19.3-win32-ssl.zip Generic Win32
http://curl.haxx.se/download/curl-7.19.3-win64-ssl-sspi.zip Generic Win64
再见,
克里斯蒂安
Hallo Christian,
»» Debugge doch mal mit z. B. curl -I. Da kannst du doch viel besser
»» feststellen, was eigentlich passiert.
http://curl.haxx.se/download/curl-7.19.3-win32-ssl.zip Generic Win32
das war einfach,
bis zur Fehlermeldung "libssl32.dll" nicht gefunden.
Na-ja, irgend etwas ist ja immer ... ;-)
m.b.G. Rolf
Hallo Christian,
»» »» Debugge doch mal mit z. B. curl -I. Da kannst du doch viel besser
»» »» feststellen, was eigentlich passiert.
»» http://curl.haxx.se/download/curl-7.19.3-win32-ssl.zip Generic Win32
das war einfach,
bis zur Fehlermeldung "libssl32.dll" nicht gefunden.
okay, das konnte ich beheben, aber das nicht mehr:
m.b.G. Rolf
你好 Rolf,
Tut mir leid, das sagt mir auch nichts...
再见,
克里斯蒂安
Moin!
»» http://curl.haxx.se/download/curl-7.19.3-win32-ssl.zip Generic Win32
das war einfach,
bis zur Fehlermeldung "libssl32.dll" nicht gefunden.
Na-ja, irgend etwas ist ja immer ... ;-)
Es gibt curl auch in einer Nicht-SSL-Variante. Wenn du also kein SSL checken musst, wäre die zu bevorzugen - das Auflösen der DLL-Abhängigkeiten, um SSL in Betrieb zu nehmen, erfordert nach meiner Erfahrung einiges an Gefummel und Probier-Arbeit, die man vermeiden kann, sofern SSL nicht relevant ist.
- Sven Rautenberg
Guten Tag,
Worauf kann man diese Verzögerung zurückführen?
Wie lässt sich der Bug beheben?
<glaskugel>Hast du die Einstellung von implicit_flush geändert? Teste mal, ob du ein ähnliches Verhalten reproduzieren kannst, wenn du zwischen header() und exit ein flush() notierst.</glaskugel>
Gruß
Christoph Jeschke
Hi,
<glaskugel>Hast du die Einstellung von implicit_flush geändert? Teste mal, ob du ein ähnliches Verhalten reproduzieren kannst, wenn du zwischen header() und exit ein flush() notierst.</glaskugel>
da er normale Adressen problemlos aufrufen kann, denke ich dein Hinweis könnte vielleicht etwas bringen, aber wenn dann bei den Zieldateien. Zumal ich sowieso denke, das dort die Fehlerquelle zu suchen ist und nicht bei HEADER=>LOCATION.
Hans
Guten Tag,
da er normale Adressen problemlos aufrufen kann, denke ich dein Hinweis könnte
vielleicht etwas bringen, aber wenn dann bei den Zieldateien.
Zumal ich sowieso denke, das dort die Fehlerquelle zu suchen ist und nicht bei
HEADER=>LOCATION.
Ist es nicht aber so, dass in seinen Logs ein Delta von 5 Sekunden zwischen den Seitenaufrufen auftaucht, dass eigentlich nicht auftauchen sollte? Das würde nämlich schon für eine Wartezeit beim verweisenden Skript sprechen, nicht beim Zielskript.
Die lokalen Adressen könnten kürzer sein, als z.B. eine getestete externe Adressen. Dann würden genügend Daten übertragen und automatisch geflusht werden.
Gruß
Christoph Jeschke