Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] statystyki wyswietlania zdjec, a FireFox, FF pobiera dwa razy
siutek
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 1
Dołączył: 26.10.2005
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Witam,
Chcialem zrobic sobie statystyki wyswietlania zdjec, do tego celu stworzylem skrypt php, ktory wyswietla na ekran odpowednie zdjecie (z uzyciem naglowka header()(IMG:style_emoticons/default/winksmiley.jpg)
W tym samym pliku kazdorazowo zapisuje do bazy id fotki i dokladna date jej wyswietlenia.

Niestety zauwazylem ze FF pobiera zdjecia dwukrotnie! w odstepie 2-4 sekund, w ten posob jedno wyswietlenie generuje mi dwa wpisy do bazy. Tego problemu nie ma np w Chromie...
Jak sobie z tym poradzic? jest mozliwosc zabezpieczenia sie? Nie chcialbym blokowac drugiego wpisu na IP :/

kod:
  1. header('Content-type: image/jpeg');
  2.  
  3. date_default_timezone_set('Europe/Warsaw');
  4.  
  5. include "./config.php";
  6.  
  7. $fotaId = base64_decode($_GET["fi"]);
  8.  
  9. $fotaArr = getRecord("gallery",$fotaId);
  10. $usrArr = getRecord("users",$fotaArr["usrId"]);
  11. queryInsert("imgStats",array("img_id"=>$fotaId,"date"=>date("U"),"user_id"=>$fotaArr["usrId"]));
  12.  
  13. $link = './usersFiles/'.$usrArr["login"].'/'.$fotaArr["fileName"];
  14.  
  15. $fota = file_get_contents($link);
  16.  
  17. echo $fota;
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Quadina
post
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. // to jest na pewno potrzebne?
  2. //date_default_timezone_set('Europe/Warsaw');
  3.  
  4. include "./config.php";
  5.  
  6. $fotaId = base64_decode($_GET["fi"]);
  7.  
  8. $fotaArr = getRecord("gallery",$fotaId);
  9. $usrArr = getRecord("users",$fotaArr["usrId"]);
  10. queryInsert("imgStats",array("img_id"=>$fotaId,"date"=>date("U"),"user_id"=>$fotaArr["usrId"]));
  11.  
  12. $link = './usersFiles/'.$usrArr["login"].'/'.$fotaArr["fileName"];
  13.  
  14. // przewidujemy, ze pliku niestety nie będzie
  15. if(is_file($link){
  16. // wysylamy caly zestaw nagłówków - być moze FF nie jest pewna, czy dostała wszystko i wysyła żądanie jeszcze raz.
  17. header('Content-type: image/jpeg');
  18. header('Content-Length: ' . filesize($link));
  19.  
  20. // czyścimy context w razie jakichś niespodziewanych błędów. error_reporting nie działa na niektóre sytuacje.
  21. flush();
  22.  
  23. // drukujemy od razu plik, nie przepisując jej do żądnej zmiennej
  24. readfile($link);
  25. } else {
  26. echo "ERROR: brak pliku $link";
  27. }


Tak jak napisałem w komentarzu w kodzie, FF może nie być pewne, czy pobrał całość, skoro nie wie ile tych danych ma dostać. Dodałem obsługę błędu, gdy pliku nie ma, możesz tam sobie wrzucić coś na maila, albo zapisywać błędy do jakiegoś pliku.

  1. $fotaArr = getRecord("gallery",$fotaId);
  2. $usrArr = getRecord("users",$fotaArr["usrId"]);

Czy nie jesteś w stanie tego wyciągnąć jednym zapytaniem z joinem?

P.S. Czepialstwo na średnim poziomie, bardziej chciałem pokazać, że można inaczej, niż że masz coś realnie źle (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 19:25