Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Serwer czasem zwraca poprawną odpowiedź, czasem nie
Forum PHP.pl > Forum > Serwery WWW
gargamel
Mam plik na serwerze. Co w nim jest - nieistotne, może to być echo 'hello world.'; Problem jest taki, że jeśli odpalam ten plik w przeglądarce ( dotyczy to tylko IE, na innych jest w porządku), to czasem wyświetli się oczekiwana odpowiedź, a czasem puste okno...

Tak wyglądają logi odwiedzin serwera:
Kod
[27/Mar/2012:02:49:18 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:18 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 343 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:19 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:19 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:20 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:21 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:23 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 343 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:23 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:24 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:25 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:26 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 343 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:27 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 539 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
[27/Mar/2012:02:49:28 +0200] "GET /path/file.php?service=order HTTP/1.0" 200 343 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"


Wpisy gdzie zwrócona liczba bajtów wyosi 539 odpowiada sytuacji gdy strona się wyświetliła, gdy bajtów było 343 - dostawałem puste okno.
Jeśli plik ma wykonać jakąć czynność ( np. zapis do bazy ) - to tak samo: raz się zapisze, a raz nie.

Będę bardzo wdzięczny, jeśli ktoś podpowie gdzie szukać smile.gif
zegarek84
343 to zapewne wielkość nagłówków... ustaw w nagłówkach albo długość odpowiedzi (musiałbyś to zbuforować) "Content-Length: ..." lub wyślij odpowiedź w trybie chunked - też powinno pomóc gdyż tam też podaje się rozmiar odpowiedzi...
http://www.httpwatch.com/httpgallery/chunked/
Chunked transfer encoding

zresztą mógłbyś dać linka do przykładowej strony...
gargamel
Tu jednak nie chodzi o długość zwracanej odpowiedzi. To co dzieje się nie tak, odbywa się gdzieś wcześniej...
Chodzi o to że serwer za kazdym razem widzi odwiedziny danego pliku, ale nie zawsze go wykona - czasem reaguje jakby był to zupełnie pusty plik. Stąd tak jak mówiłem, jeśli plik ma wykonywać zapis do bazy, to raz go wykona, a raz nie.

Zauważyłem ponadto, że jeśli wywalę .htaccess i odwołam się bezpośrednio do pliku - wszystko działa jak należy.

.htaccess którego używam to:

Kod
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9\_\-\/]+)(.php|.htm|.html)?$ index.php?a=$1.php [L,QSA]


logi błędów serwera są puste.
zegarek84
tak, ale jak wspomniałeś problem dotyczy tylko IE - jak dla mnie to przeglądarka zrywa połączenie... możesz to zresztą sprawdzić korzystając z funkcji typu ignore_user_abort
gargamel
zegarek84 trochę mnie naprowadziłeś na rozwiązanie smile.gif W różnych miejscach kodu umieszczałem die( "".connection_status ()."" ); i sprawdzałem co się dzieje.
Wszystkie pliki były kierowane do pliku index.php który z nimi coś tam robił. Plik ten korzystał z metody którą zrobiłem do startowania sesji:
  1. private function InitializeSession(){
  2. if( !isset( $_SESSION['ini'] ) ){
  3. $_SESSION['ini'] = true;
  4. $_SESSION['remote_addr'] = $_SERVER['REMOTE_ADDR'];
  5. $_SESSION['http_user_agent'] = $_SERVER['HTTP_USER_AGENT'];
  6. }
  7. if( $_SESSION['ini'] ){
  8. if( $_SESSION['remote_addr'] != $_SERVER['REMOTE_ADDR'] || $_SESSION['http_user_agent'] != $_SERVER['HTTP_USER_AGENT'] ){
  9. die();
  10. }
  11. else{
  12. }
  13. }
  14. }


Przy kolejnych odświeżaniach strony w IE9, do serwera była wysyłana inna wartość IP, przez co wykonywało się

  1. die();


Czemu IP wysyła się różne (mimo że mam stałe IP) to nie wiem... Chociaż - w końcu to explorer smile.gif

Dzięki za pomoc smile.gif
zegarek84
Cytat(gargamel @ 27.03.2012, 18:30:09 ) *
Czemu IP wysyła się różne (mimo że mam stałe IP) to nie wiem...

możesz mieć ustawione proxy w IE lub w jakimś antywirusie np. dla IE (chyba w COMODO taką opcję dla stron internetowych widziałem...) albo tor'a jeśli instalowałeś ustawiłeś na IE i zapomniałeś wyłączyć...
gargamel
No właśnie nic z tych rzeczy smile.gif IE mam tylko po to żeby testować stronki - nic tam nie grzebałem. Tak czy owak olać to smile.gif Skrypt działa biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.