Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML]dot dot slash problem, jak bezproblemowo odwolywac sie do wielu plikow w wielu folderach?
xix
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 14.11.2008

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


Oto proste drzewo plikow
../a.php
../b.php
../f/c.php
Jak widac pliki a i b sa na tym samym poziomie, a plik c jest w folderze f.
Z tego co widze, by sie odwolac do pliku a z pliku b, to w pliku b nalezy zamiescic funkcje include('./a.php').
Aby odwolac sie do pliku a z pliku c, to w pliku c nalezy zamiescic funkcje include('../a.php'). Plik c odwoluje sie rowniez do innych plikow i tu pojawiaja sie bledy w ich znalezieniu (sciezki probowalem wpisywac w roznych konfiguracjach i nic nie wychodzi).

Pytanie:
Czy istnieje jakis sposob na funkcje podobna do ponizszej, ktora ulatwilaby poruszanie sie miedzy plikami:

wazny_folder(jest tam, gdzie znajduje sie plik a);
zastosowanie:
inlude('wazny_folder('./f/c.php')');

Ten post edytował xix 17.01.2009, 00:52:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nie bardzo rozumiem problemu. chcesz z pliku c odwołać się do plików w folderze wazny_folder.

jeśli tak to w c.php wpisz:
  1. <?php
  2. include ('../wazny_folder/plik.php');
  3. ?>


ale jak mówię nie wiem czy o to Ci chodzi.


--------------------
Go to the top of the page
+Quote Post
xix
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 14.11.2008

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


Wyjasnie moze bardziej w inny sposob o co mi chodzi.
Oto inne drzewo plikow:
/a.php
/1/b.php
/2/c.php
/d.php

1 i 2 to foldery plikow "b.php" i "c.php".
Plik "c.php" jest skladnikiem pliku "a.php" ("c.php" zawiera sie w "a.php") i jednoczesnie rowniez jest on czescia pliku "b.php".
Jezeli zrobie odwolanie do pliku "d.php" z pliku "c.php" poprzez "../", to plik "d.php" nie zostanie znaleziony w pliku "a.php" lub "b.php", bo jest on widziany od strony wlasnie tych plikow "a.php" i "b.php", a nie od strony pliku "c.php", mimo ze tam znajduje sie do niego jedyny odnosnik.

Oczywiscie u mnie sprawa jest znacznie bardziej skomplikowana, a nie chce mnozyc plikow, ktore beda wygladaly identycznie, procz zawartych w nich odnosnikow.
Jak to rozwiazac?
Pomyslalem, ze moze mozna ustalic jakas rozna kotwice/zakladke dla plikow "a.php" i "b.php".
Ja tego nie wiem, ale moze jednak jest lepsze odwolanie, niz "../" - na przyklad "%/", gdzie % to folder glowny (odsylanie do tego folderu niezalezne od glebokosci pliku).

Ten post edytował xix 17.01.2009, 12:43:42
Go to the top of the page
+Quote Post
Eagle
post
Post #4





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

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


Średnio to wszystko rozumiem ale może zobacz set_include_path()
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Ewentualnie możesz stosować ścieżki bezwzględne zamiast względnych.
Go to the top of the page
+Quote Post
xix
post
Post #6





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 14.11.2008

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


Nie rozumiem czemu zmieniac globalnie plik php.ini, jezeli zmiany potrzebuje tylko lokalnej dla jednego pliku. Czy nie da sie tego prosciej zrobic? Szukalem z reszta po necie i po ksiazkach i wzoru niestety nie znalazlem jak takie cos przeprowadzic.
Musze zastosowac sciezki bezwzgledne, bo plikow mam duzo i sa przenoszone z miejsca na miejsce.

Aby jeszcze rozjasnic jaki jest problem, do zamieszczonego wczesniej drzewa katalogow dodam zawartosc plikow.

/a.php
Zawartosc pliku a.php z folderu glownego:
Kod
<?php
     include('./2/c.php');
     ?>
     widze plik a<br />


/1/b.php
Zawartosc pliku b.php z folderu 1 umieszczonego w folderze glownym:
Kod
<?php
     include('../2/c.php');
     ?>
     widze plik b<br />


/2/c.php
Zawartosc pliku c.php z folderu 2 umieszczonego w folderze glownym:
Kod
<?php
     include('./d.php');
     ?>
     widze plik c<br />


/d.php
Zawartosc pliku d.php z folderu glownego:
Kod
<?php
     echo "widze plik d<br />";
     ?>


po wyswietleniu pliku a.php w przegladarce otrzymam wynik:
Cytat
widze plik d
widze plik c
widze plik a


po wyswietleniu pliku b.php w przegladarcze otrzymam wynik:
Cytat
Warning: main(./d.php): failed to open stream: No such file or directory in...
Warning: main(): Failed opening...
widze plik c
widze plik b


Jezeli zmienie w pliku "c.php" sciezke "include('./d.php');" na "include('../d.php');"
to blad nie pojawia sie juz przy wyswietleniu pliku "b.php", ale pojawia sie przy wyswietleniu pliku "a.php".
Sprawa by byla rozwiazana, jesli cos by wysylalo do folderu glownego na przyklad w taki sposob:
"include('%/d.php');"
% oznacza - niezaleznie gdzie jestes szukaj plik zaczynajac od folderu glownego / folderu zakladki / folderu kotwicy...

Ten post edytował xix 17.01.2009, 14:30:50
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zrób sobie stałą, która zawiera bezwzględną ścieżkę do całego skryptu, np.
  1. <?php
  2. define('CWD', '/home/user/public_html/katalog/');
  3.  
  4. // gdzies dalej...
  5.  
  6. reqire CWD.'/lib/skrypt.php';
  7. ?>


Stałą możesz sobie deklarować w jakimś konkretnym pliku i go dołączać. Najpewniejszy sposób.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
xix
post
Post #8





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 14.11.2008

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


Jest to jakies rozwiazanie, chociaz na pewno ladniejsze bylo by z jakims % na przyklad. Niestety "../" wysyla tylko folder wyzej, wiec fajnie by bylo, gdyby jeszcze istnialo cos typu "%/" wysylajace do glownego folderu. Juz jeden plik ze stalymi mam, wiec tam doloze ta nowa.
W praktyce, do powyzszego drzewka dodalem jeszcze jeden plik "e.php" z ponizsza zawartoscia:
Kod
<?php
      define('KOTWICA','C:\usr\apache\httpd\html/');
      ?>

do pliku "a.php" dodalem nowa linie:
Kod
<?php
      incude('./e.php');
      include('./2/c.php');
      ?>
      widze plik a

do pliku "b.php" dodalem nowa linie:
Kod
<?php
      incude('../e.php');
      include('../2/c.php');
      ?>
      widze plik b

a plik "c.php" zostal zmieniony tak:
Kod
<?php
      include KOTWICA.'d.php';
      ?>
      widze plik c


Plik "d.php" nie ulegl zmianie. Uwaga na ilosc kropek przy linkach!

Ten post edytował xix 17.01.2009, 18:03:05
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Jest to jakies rozwiazanie, chociaz na pewno ladniejsze bylo by z jakims % na przyklad. Niestety "../" wysyla tylko folder wyzej, wiec fajnie by bylo, gdyby jeszcze istnialo cos typu "%/" wysylajace do glownego folderu.

Ładniejsze tak, ale nie byłoby już tak wydajne i czytelne, ponieważ wczytać stałą jest dużo szybciej niż obrabiać łańcuch w poszukiwaniu wybranego przez Ciebie tekstu. Poza tym, inny programista musiałby się domyślać, o co chodzi. winksmiley.jpg

Poza tym, musiałbyś - w pewnym sensie - wynaleźć koło na nowo i pisać drugi raz coś, co tak naprawdę istnieje - stała + nazwa pliku.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Aktualny czas: 20.08.2025 - 14:26