Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dublowanie skryptu
Forum PHP.pl > Forum > Przedszkole
MWL
Witam.
Postanowiłem napisać dla siebie swój własny framework i obecnie natknąłem się na naprawdę bardzo duży problem. Otóż podczas wykonywania skryptu zapisy sesji (inkrementacja) czy też zapytania sql dublują się. Nie mam pojęcia dlaczego tak się dzieje. Pomimo wypisywania w miejscu zapisu zmiennej znaku ! (teoretycznie powinienem zobaczyć 2) pokazuje się tylko jeden. Tak jakby zapis zmiennej sesji, albo wykonanie sql i tylko to wykonywało się po raz 2. Nie mam pojęcia, jak rozwiązać ten problem. Czy ktoś wie coś na ten temat (wiem że to nie wróżka, ale framework jest za duży by wklejać tutaj jego kod). Może to jakiś mankament PHP? Jestem w 100% pewien że metoda w której edytowana jest sesja nie powtarza się. Jednocześnie kiedy nie zwiększam wartosci zmiennej o 1 nie otrzymuję nic, gdy zwiększam o 2 dostaję 4, więc coś jakby musi leżeć w tym problemie. Czy ktoś miał podobny problem?
Zyx
Pomógłbyś sporo, gdybyś napisał chociaż, JAK te sesje w Twoim frameworku działają, zamiast rozwodzić się nad wróżkami. Dodaj sobie do metody/funkcji zapisującej sesję robienie zrzutu wyjścia debug_backtrace() do jakiegoś pliku, uruchom jedną podstronę i powinieneś tam mieć zrzucone dokładne informacje, gdzie zapisywanie sesji było wywoływane.
MWL
Ok. Działają normalnie, to znaczy:

  1. echo '!';
  2. $_SESSION['t'] = intval($_SESSION['t'])+1;
  3. echo $_SESSION['t'];


Co ciekawe, kiedy zrobię to na samym początku (w pierwszym pliku index.php) efekt mam ten sam. I dalej. TO dzieje się tylko w Firefox (mam mac'a). Ktoś wie o co chodzi? Firefox najpierw pobiera kod źródłowy, a potem stronęquestionmark.gif Nie wiem...

Innymi słowy, firefox wywołuje skrypt 2 razy, czy jest jakiś sposób by to powstrzymać?
Zyx
Próbowałeś sposób z debug_backtrace()? Używasz standardowego mechanizmu obsługi sesji czy napisałeś własny, np. do trzymania danych w bazie? Skoro piszesz, że dzieje się tak jedynie w Firefoksie, być może w którymś miejscu masz jakieś przekierowanie, które przeładowuje tę samą stronę i niektóre przeglądarki to ignorują, a inne nie?
MWL
Nie, nie ma żadnego systemu. Poza tym w nowym pliku (zupełnie innym) czystym o zawartości

  1. <?php
  2.  
  3. echo '!';
  4. $_SESSION['t'] = intval($_SESSION['t'])+1;
  5. echo $_SESSION['t'];
  6. ?>


Efekt jest ten sam. Wszędzie działa, w firefox nie działa. Po wysłaniu na serwer publiczny (http://ciachanie.pl/duble/). Jak zgaduję na windowsie taki błąd nie występuje...

  1. echo '<br /><pre>';
  2. echo '</pre>';


widzę:
array(0) {
}

-----

Problem udało mi się rozwiązać. Okazało się że leży po stronie ySlow (dodatku, do optymalizacji, który po załadowaniu strony ładuje ją jeszcze jeden raz).
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.