Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z require_once()
Forum PHP.pl > Forum > PHP
piotrek4team
Witam. Mam taki problem:
Mam klasę "userStats" w folderze inc, którą ładuje w index.php. Ona zaś ładuje plik accesArr.php z folder db. Wszystko ok, tylko jeżeli załaduję plik accesArr.php z prawidłową scieżką, to dostaję w zamian fatal error, podczas gdy jak ładuję z innego pliku, to wszystko działa.
  1. //index.php
  2.  
  3. require_once("inc/userStats.class.php");
  4.  
  5. //dalszy kod
  6.  

  1. //usersStats.class.php
  2. //ta wersja jest prawidłowa (przynajmniej tak mi się wydaje) i działa ze wszystkimi plikami, oprócz index.php
  3.  
  4. require_once("../db/accessArr.php");
  5.  

  1. //usersStats.class.php
  2. //a ta wersja działa z index.php
  3.  
  4. require_once("db/accessArr.php");
  5.  

Układ folderów wygląda następująco

index.php
/inc
userStats.class.php

/db
accessArr.php

/administration
panel.php (z tego pliku działa pierwsza wesja)


Być może źle rozumuje, ale wydaję mi się że gdy plik jest dołączany, to powinien się ładować względem bezpośredniego pliku który go ładuje, a nie jeszcze wcześniejszego. Szukałem w internecie, ale niestety nic nie znalazłem.
z góry dzięki za pomoc
Burned
Pełna treść błędu wskazuje pewnie na linijkę kodu, w której błąd wystąpił. Bez tego to tu nikt nic chyba nie podpowie.
Poza tym do względnych ścieżek możesz użyć dirname(__FILE__)
tehaha
funkcja
  1. require()
załącza kod zawarty we wskazanym pliku, a nie przekierowuje do niego, tak więc skoro ładujesz pliki do index.php to ścieżki muszą być względem pliku index.php.

W Twoim przypadku to nie plik usersStats.class.php ładuje accessArr.php tylko cały czas index.php, Ty tylko załączyłeś kod z pliku usersStats.class.php do pliku index.php
piotrek4team
a to dziwne. bo ja tak samo ładuję pliki w innej klasie i jeżeli by to tak działało to nie powinno mi działać to w tamtym pliku winksmiley.jpg ładuje plik z folderu nadrzędnego, a potem gdy w załadowanym pliku odwołuję się do następnego pliku, to nie używam ścieżki poprawnej do wcześniejszego pliku, tylko do tego już załadowanego. smile.gif

Czyli pierwszy plik ładuje za scieżką "inc/jakasklasa.class.php", a potem w pliku "jakasklasa,class.php" ładuj plik też z folderu inc to nie używam scieżki "inc/jakasklasa2.class.php", tylko "jakasklasa2.class.php"

Co do linijki w którym błąd występuje to mi właśnie w miejscu require_once wywala że w pliku userStats nie udało się załadować pliku accessArr.php, ponieważ on nie istnieje.

a to treść błędu:

Warning: require_once(../db/accessArr.php) [function.require-once]: failed to open stream: No such file or directory in C:\Dokumenty\php\inc\userStats.class.php on line 4

Fatal error: require_once() [function.require]: Failed opening required '../db/accessArr.php' (include_path='.;C:\php5\pear') in C:\Dokumenty\php\inc\userStats.class.php on line 4
tehaha
no rzeczywiści zrobiłem test i działają u mnie 2 ścieżki: względem pliku index.php i względem tego drugiego pliku, który jest ładowany. Więc w takim razie nie rozumiem na czym polega Twój problem? błąd, który się pojawia oznacza, że nie znaleziono pliku.
piotrek4team
no właśnie. jeżeli dam tak:
  1. //userStats.class.php
  2.  
  3. //require_once("../db/accessArr.php");
  4. require_once("iFile.class.php");


to wczyta poprawnie iFile.class.php, a on jest adresowany względem pliku userStats.class.php, a nie index.php. Czyli tamto odpada smile.gif
macie jeszcze jakieś pomysły?
bo ja nie mam pojęcia ;D

dodam jeszcze, że dla kodu:
  1. echo dirname(__FILE__);


oba pliki zwrócą "C:\Dokumenty\php\inc", a tylko na jednym potem dostaję błąd

//edit
zrobiłem tak, że włożyłem folder db to folderu inc i teraz wszystko działa winksmiley.jpg ale jeśli macie jeszcze jakieś pomysły to piszcie
tehaha
Ty to testujesz na serwerze, czy na swoim kompie?
piotrek4team
oba pliki zwrócą "C:\Dokumenty\php\inc", a tylko na jednym potem dostaję błąd

no czyli na kompie. zaraz wrzuce na serwer i zobacze co bedzie winksmiley.jpg

//edit
na serwerze działa normalnie winksmiley.jpg być może to wina tego że windows nie rozróżnia wielkości znaków... smile.gif nie wiem, ale dziala
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.