Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[php] Problem ze ścieżkami dostępu

Ostatnio zmodyfikowano 2013-05-26 14:17
Autor Wiadomość
Kopczak1995
Temat założony przez niniejszego użytkownika
[php] Problem ze ścieżkami dostępu
» 2013-05-26 12:20:13
Witam ponownie :) Znów pehap mi daje popalić :P
Mianowicie w końcu zdecydowałem się przerobić całą moją stronę na zlepek kilku funkcji, aby nie trzeba było kopiować całego (jak dla mnie) gigantycznego kodu źródłowego, a jedynie kilka zgrabnych komend. Wszystko było pięknie dopóki katalogi miałem w ten sposób:
W katalogu głównym:
-strona która testuję
-index (mało ważny, odnosi się jedynie do strony testowej)
W katalogach podrzędnych:
-folder css (tutaj w środku arkusze stylów naturalnie)
-folder skrypty_php (tutaj zbiór moich funkcji)
-folder treści_stron (tutaj miałem to co miało się wyświetlać w BODY)

No i jak już mówiłem w tym stanie wszystko było cacy i nie miałem większych problemów. Jednak w końcu musiałem umieścić stronę w kolejnym katalogu podrzędnym (u mnie był to folder "strony") abym miał schemat do budowy kolejnych podstron (przecież nie będę ich wszystkich trzymał koło indexu...). I tutaj zaczęła się zabawa. Zarzucę kod:

<?php
//------------------strona_testowa------------------//
include("../skrypty_php/baza_strony.php");
nagłówek($tytuł = "TEST NAGŁÓWKA!!!", $tekst_u_góry = "KOLEJNY TEŚCIK :P", $czy_index = 0);
//U góry wpisuję jedynie adres strony i tekst w nagłówku jako widoczne zmienne. Resztę mam w skryptach
menu($zmienna = 0);
//Ta zmienna była abym na if'ach sprawdzał czy to index, czy zwykła stronka (kwestia innych katalogów)
//-------------------TREŚĆ STRONY-------------------//
include("../treści_stron/tekst_testowy.php");
treść();
//--------------------------------------------------//
panel_dodatkowy();
stopka();
//Takie tylko dodatkowe bzdety z boku i na dole strony. Mało ważne...
//--------------------------------------------------//
?>
Naturalnie jedyne co byłoby potrzebne to zmiana dostępu do katalogów i zamiast pisać
include("skrypty/dany_skrypt.php");
 zmieniłem na
include("../skrypty/dany_skrypt.php");
 Jednak za cholerę (sory za słowo) to dziadostwo nie chce mi działać!!!
Powiecie mi dlaczego nie można dostać się do katalogów nadrzędnych? Do podrzędnych wbijam bez trudności, a tutaj jakaś maszakra :/
P-83936
DejaVu
» 2013-05-26 12:50:12
Na hostingach nie można wyjść poza katalog domenowy (bo tak się je konfiguruje ze względów bezpieczeństwa). Niemniej jednak jeżeli pliki leżą w obrębie domeny, a pliki masz po prostu wsadzone w 'głębszym' katalogu, to kropeczki powinny działać. W każdym razie sam się użerałem długi czas z problemem 'kropeczek' w PHP-ie i koniec końców rozwiązałem to w dużym uproszczeniu tak:
$GLOBALS["root"] = "../";//Ścieżka prowadząca do naszego 'roota' względem bieżącego katalogu
function LoadLibrary( $sFile ) { include( $GLOBALS["root"].$sFile); }
//...

LoadLibrary("silnik/sesje.php");
LoadLibrary("silnik/ciasteczka.php");
LoadLibrary("silnik/inne_pierdoly.php");

//itd...
P-83945
Kopczak1995
Temat założony przez niniejszego użytkownika
» 2013-05-26 13:50:57
Czyli jeśli dobrze rozumiem (bo pojęcie "root" jest mi obce). Jeśli moja stronka (względem katalogu głównego) znajduje się w podfolderze "strony", to muszę tego root'a ustawić w ten sposób
$GLOBALS["root"] = "../";
 i po prostu wszystkie pliki będą się ładowały począwszy od głównego katalogu?
P-83957
DejaVu
» 2013-05-26 13:57:17
Załóżmy że:
  • cpp0x.pl <= to jest nasz root
  • /aktualnosci/ <= to jest podkatalog
  • /aktualnosci/index.php <= tu mamy plik, który uruchamiamy
  • /silnik/ciasteczka.php <= tu mamy plik, który chcemy wciągnąć
to plik /aktualnosci/index.php może wyglądać tak:
$GLOBALS["root"] = "../";
//...
LoadLibrary( "silnik/ciasteczka.php");
Natomiast plik /index.php może wyglądać tak:
$GLOBALS["root"] = "";
//...
LoadLibrary( "silnik/ciasteczka.php");
P-83959
Kopczak1995
Temat założony przez niniejszego użytkownika
» 2013-05-26 14:04:30
Za każdym razem odwala mi wynik tego typu: (jedyna różnica to to, że teraz nagłówek mi się wyświetlił -.-)

Warning: include(treści_stron/tekst_testowy.php) [function.include]: failed to open stream: No such file or directory in /virtual/l/e/lekcje-php.ugu.pl/strony/czysta_strona_INphp.php on line 9

Warning: include() [function.include]: Failed opening 'treści_stron/tekst_testowy.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /virtual/l/e/lekcje-php.ugu.pl/strony/czysta_strona_INphp.php on line 9
Tak mi wygląda ta konkretna stronka.
Te odnośniki normalnie powinny być moim menu strony, ale css'y zapewne mają coś ze ścieżką dostępu podobnie jak include...
Wrzucę może jak mi to teraz wygląda:

<?php
$GLOBALS["root"] = "../"; //Ścieżka prowadząca do naszego 'roota' względem bieżącego katalogu
function LoadLibrary( $sFile ) { include( $GLOBALS["root"].$sFile); }

//----------------------BŁĘDY ^^--------------------//
//include("skrypty_php/baza_strony.php");
LoadLibrary("skrypty_php/baza_strony.php");
nagłówek($tytuł = "TEST NAGŁÓWKA!!!", $tekst_u_góry = "KOLEJNY TEŚCIK :P", $czy_index = 0);
menu($zmienna = 0);
//-------------------TREŚĆ STRONY-------------------//
//include("treści_stron/tekst_testowy.php");
LoadLibrary("treści_stron/tekst_testowy.php");
treść();
//--------------------------------------------------//
panel_dodatkowy();
stopka();
//--------------------------------------------------//
?>
@Down Hmmm... Jak dotąd nie wywalał mi nic pehamp, więc tak robiłem :D No zobaczę, może to to :P
P-83960
DejaVu
» 2013-05-26 14:08:40
treści_stron/tekst_testowy.php
Dżizas! Nie używaj polskich znaków w nazwach plików i katalogów! :)

/edit:
Call to undefined function treść() in /virtual/l/e/lekcje-php.ugu.pl/strony/czysta_strona_INphp.php
No i też nie używaj polskich znaków w nazwach funkcji, zmiennych itp! :)
P-83961
DejaVu
» 2013-05-26 14:14:52
Z Twojego komunikatu wynika, że ścieżka jest lipna, więc sprawdź:
function LoadLibrary( $sFile ) {
print("Sciezka do otworzenia: ".htmlspecialchars($GLOBALS["root"].$sFile)."<br>");
include( $GLOBALS["root"].$sFile);
}
P-83962
Kopczak1995
Temat założony przez niniejszego użytkownika
DZIAŁA!!! JEEEJ :D
» 2013-05-26 14:17:39
Dobra już przystopuj :D Wszystkiemu winne były nasze cudowne polskie znaki... Poprawiłem wszystkie dostępne zmienne i funkcje na takie bez znaków polskich i już działa :P

Zamykam temat. Dzięki :)
P-83963
« 1 »
  Strona 1 z 1