Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem (chyba) z Open Power Template
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
Kamil J.
Witam

Z góry uprzedzam, iż zdecydowałem się napisać o moim problemie na tym forum ( a nie na forum biblioteki OPT ) ponieważ nie jestem do końca pewnien czy dana biblioteka jest przyczyną problemu.

Opisując w skrócie: problem przejawia się tym, że gdy używam biblioteki OPT strona jest wywoływana podwójnie.

A charakteryzując dokładniej: dzieje się tak w firefoxie (w IE nie, narazie innych przeglądarek nie sprawdzałem) oraz (drugi warunek) gdy przechodzę na stronę z innego adresu (bądź odświerzam przez ctrl+f5), co jest powiązane jak się domyślam z buforem przeglądarki. (przy normalnym odświerzeniu strona zostaje wywołana raz)

Aby upewnić się, że problem jest niezależny od mojego frameworka napisałem testowy plik:

  1. <?php
  2.  
  3. class FrameworkException extends Exception{}
  4.  
  5. require "../Core/Classes/File.Class.php";
  6. require "../Core/Libs/opt/opt.class.php";
  7.  
  8. $file = new File('plik.txt');
  9.  
  10. $file->open(FILE::MODE_END_READ_WRITE_CREATE);
  11.  
  12. define('OPT_DIR', "../Core/Libs/opt/");
  13.  
  14. $opt = new optClass();
  15.  
  16. $opt->root = "../Application/Views/Templates/";
  17. $opt->compile = "../Application/Views/Templates_c/";
  18. $opt->plugins = "../Core/Libs/opt/plugins/";
  19. $opt -> httpHeaders(OPT_HTML);
  20.  
  21. $opt->parse('_header.php');
  22.  
  23.  
  24.  
  25. $file->write("Koniec pliku index.php\n\n---------------------------------\n\n");
  26. $file->close();
  27. ?>



W opisanych powyżej warunkach, za jednym przeładowaniem strony wiadomość "Koniec pliku..." loguje się 2 razy.

Po usunięciu kodu klasy OPT, a dokładnie linii wywołującej parser, problem znika i w każdym przypadku dostaje raz zalogowaną wiadomość.

Czy ktoś ma pojęcie co jest źle? A może nic nie jest źle tylko ja nie mam o czymś pojęcia. Każda sugestia będzie mile widziana, bo szukam rozwiązania już od kilkunastu godzin.

Ja w każdym razie nie wiem jak OPT może wpływać na ponowne wywołanie adresu.

Z góry dziękuje za odpowiedź.

[EDIT] Ze smarty zachowuje się tak samo. Więc jaki czynnik z tych szablonów wpływa (w sumie już nie wiem co) server, przeglądarkę?
sf
Proponuje dalej posprawdzać. Przede wszystkim użyj samego systemu szablon, bez frameworka. Inny pomysł to daj exit na koniec pliku index.php.
Kamil J.
Hehe, naprawdę już dużo rzeczy i razy sprawdzałem. W sumie już nie mam pomysłu co sprawdzać, liczę, że ktoś mnie naprowadzi. W każdym razie testy jak wyżej napisałem były przeprowadzone bez frameworka (jedyne komponenty z niego użyte to niezależna klasa File której Ex korzysta z FrameworkException). smile.gif

I teraz doszedł jeszcze kolejny czynnik, który pogłubił mnie już zupełnie. Mianowicie mam dwa pliki index.php (takie samo wywołanie Widoku wewnątrz kontrollera) oraz test.php (treść widoczna powyżej)(nie korzysta z frameworka).

I teraz:
w index.php problem występuje przy wywołaniu przez index.php albo index.php/costam...

W test.php problemu nie stwierdziłem gdy path_info jest puste, za to gdy ma choćby jednego slasha test.php/ to już wywołanie następuje dwa razy. Wydaje mi się to bardzo dziwne, ponieważ test.php w ogóle z tej zmiennej nie korzysta (framework owszem).

Dodanie exit(); na końcu pliku nie pomogło. Pomaga za to dodanie exit(); przed parse(). Czyli (ja już nie mówię, że coś nie tak z opt lub smarty) jakiś czynnik z szablonów musi wywierać wpływ na sam już nie wiem co.

Mile widziana będzie każda wskazówka. Już nawet nie interesuje mnie tak bardzo samo rozwiązanie problemu, co przyczyna - w celach edukacyjnych, bo z tego co szukałem w google problem jest w miarę oryginalny.

Z góry dziękuje.


[edit] Nikt nie ma żadnego pomysłu? :/
sf
Sprawdź czy problem występuje na jakimś innym serwerze niż Twój ( ustalisz czy to wina serwera czy coś w skrypcie ) . Zobacz także czy nie masz jakiś reguł mod rewrite w .htaccess .
Kamil J.
Przepraszam, że tak późno odnawiam temat, ale tak czasem w życiu się układa.

Wracając do tematu. Zgodnie z podpowiedziami Sf sprawdziłem skrypt na innym serwerze i dzieje się to samo. Problem występuje także przy pustym pliku .htaccess , więc myślę że problem leży po stronie skryptu.

Nie wiem co biblioteki Smarty i OPT powodują (bo gdy usunę wywołanie ich w skrypcie to problemu nie ma), że strona przy powyżej opisanych warunkach wyświetla się dwa razy.

Proszę o jakieś pomysły, ponieważ ja i moi znajomi nie mamy już żadnych, które naprowadziły by nas na przyczynę.

Z góry wielkie dzięki.
Pozdrawiam.
Zyx
Bez kodu frameworka, ew. samego używanego w teście pliku, ciężko mi powiedzieć, gdzie może zachodzić problem. Na pierwszy rzut oka wygląda mi na skopane buforowanie wyjścia, tyle że to nie tłumaczy, skąd system logów dwukrotnie wpisuje coś do pliku. Kodu przeładowującego stronę OPT także nie posiada.

Dodam, że OPT jako taki był używany już z rozmaitymi frameworkami i jeszcze nie dostałem podobnego zgłoszenia o błędzie. Tym bardziej Smarty, który jest popularniejszy i dłużej obecny.
Kamil J.
Tak jak już pisałem w poprzednich postach - zrobiłem także test bez użycia frameworka. Kod tego pliku można znaleźć w postach powyżej. Jedyne z czego ten skrypt korzysta to klasa ułatwiająca zapisywanie danych do plików i rozszerzenie Exception, którego wymaga ta klasa.

Pozdrawiam.

Cytat(Zyx @ 30.07.2008, 21:31:07 ) *
Dodam, że OPT jako taki był używany już z rozmaitymi frameworkami i jeszcze nie dostałem podobnego zgłoszenia o błędzie. Tym bardziej Smarty, który jest popularniejszy i dłużej obecny.


Tak, jestem tego świadom, dlatego na początku podejrzewałem wszystko tylko nie te systemy szablonów. No, lecz teraz już nic innego mi nie zostało.
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.