Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> require_once
Athlan
post 15.03.2011, 17:58:44
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Witam.

Ostatnio natrafiłem na bardzo dziwny problem. Jak programuję kilka lat, tak to mnie zbiło z nóg. Mianowicie, za każdym razem uruchamiany jest plik index.php, który robi require_once Vframe.Class.php, który zawiera deklarację klasy Vframe.

W losowych zupełnie przypadkach dla tych samych danych wejściowych requestu dostaję informację, że nie można redeklarować klasy Vframe. Co dziwne:
  • klasa nie jest deklarowana nigdzie indziej, niż w pliku Vframe.Class.php
  • plik Vframe.Class.php jest dołączany require_once tylko w pliku index.php
  • nie ma innych require/include (bez once) w dalszej części kodu


Nie mam zielonego pojęcia, co może być nie tak. Wycieki pamięci? PHP Version 5.2.5 (x64), serwer IIS7.


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
-krzotr-
post 15.03.2011, 18:56:32
Post #2





Goście







To może sprawdź gdzie dokładnie znajduje się ta klasa ?

Na początku pliku Vframe.Class.php dodaj

  1. <?php
  2.  
  3. if( class_exists( 'Vframe', FALSE ) )
  4. {
  5. $class = new ReflectionClass( 'Vframe' );
  6.  
  7. die( $class -> getFileName() );
  8. }
Go to the top of the page
+Quote Post
Athlan
post 15.03.2011, 20:27:20
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Wskazało plik Vframe.Class.php.

Zrobiłem dalsze testy, wsadziłem coś takiego:

  1. if(class_exists( 'Vframe', FALSE ) )
  2. {
  3. $class = new ReflectionClass( 'Vframe' );
  4. die( $class -> getFileName() );
  5. }
  6. else
  7. echo 'allright';


Niestety, przy próbie załączenia pliku Vframe.Class.php wyskakuje ścieżka z die(). Jeżeli klasa by była już zadeklarowana, przynajmniej raz bym otrzymał na ekranie napis allright. Niestety się tak nie dzieje. Co więcej, po wyrzuceniu require_once z index.php dalsza część kodu wyrzuca informacje, że nie ma zdefiniowanej klasy Vframe.

Oznaczałoby to, że plik Vframe.Class.php wykonuje samego siebie jeszcze raz, skoro nigdzie indziej nie ma deklaracji tej klasy. Niestety, nie może się to stać, bo w tym przypadku również bym otrzymał przynajmniej raz napis allright.

Wykonałem dodatkowy test, zmieniłem nazwę klasy na VframeB, zeby przetestować ewentualne powiązania autoloadu z nazwą pliku. Nazwę zmieniłem również w przeklejonym wyżej kodzie testującym, okazało się, że problem jest ten sam! o.O


--------------------
Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij pod postem.
Go to the top of the page
+Quote Post
wookieb
post 15.03.2011, 20:31:15
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wstaw sobie na początku tego pliku
http://pl2.php.net/manual/pl/function.debu...t-backtrace.php
to będziesz wiedział kto i gdzie includuje drugi raz twoją klasę.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 22:44