Zapobieganie stosowania '../' w odniesieniu do folderów

0

Dzień dobry w te świąteczne dni. Mam pytanie, robię na swojej stronce magazyn plików do których będę miał dostęp. I tutaj następuje pytanie, odnosząc się do klasy odpowiedzialnej za udstępnianie plików i folderów znajdujących się w folderze w którym jesteśmy - konstruuje zmienną w oparciu o:

$server['DOCUMENT_ROOT'] i $server['PHP_SELF']

i klasie DirectoryIterator do której wcześniej utworzona zmienna jest przekazywana, następnie na obiekcie z klasy DirectoryIterator operujemy.
Wszystko w tym momencie działa jak należy, chodzi o samą strukturę, mianowicie.
Wcześniej wspomniana klasa musi być dodwawa za pomocą metody require_once do kolejnych zagnieżdzonych plików a te do wszystkich folderów do których user może mieć dostęp przez co konstruują się niepotrzebne '../../../../../' - oczywiście wykonałem metodę, która dodaje to za nas zwracając uwagę na zagnieżdzenie (drzewo i katalog w którym aktualnie jesteśmy ukazywany jest w URL'u więc nie było to jakieś trudne)m jednakże w każdym pliku w folder

0

Oczywiście stosuje autoload ale wtedy także muszę dodawać plik z autoloadem do każdego głównego pliku w folderze.

0

Twój opis jest niestety dosyć enigmatyczny - mógłbyś spróbować jaśniej?

0

Ja może trochę to rozumiem, więc spróbuję pomóc.
Staraj się nie używać praktycznie nigdy, względnych ścieżek, ja jakoś tak z doświadczenia bardziej preferuję bezwzględne, ew takie przekazywane przez zmienne systemowe.

Możesz np. zrobić w katalogu głównym Twojej aplikacji (albo np public/public_html o ile używasz jakiegoś frameworka) stałą np APP_BASE_PATH i przypisać do niej aktualną ścieżkę (o ile dobrze pamiętam to funkcja cwd() zwraca Ci aktualną ścięzkę).

Zakładam, że nie korzystasz z frameworków - więc moją ostatnią poradą zostaje chyba tylko zajrzenie w kod źródłowy popularnych frameworków i przyjrzenie się temu jak one rozwiązują opisany przez Ciebie problem. W symfony 3 zrobisz to np. tak -

$projectRoot = $this->get('kernel')->getProjectDir(); 

Prześledź działanie tej metody.

0
axelbest napisał(a):

Ja może trochę to rozumiem, więc spróbuję pomóc.
Staraj się nie używać praktycznie nigdy, względnych ścieżek, ja jakoś tak z doświadczenia bardziej preferuję bezwzględne, ew takie przekazywane przez zmienne systemowe.

Możesz np. zrobić w katalogu głównym Twojej aplikacji (albo np public/public_html o ile używasz jakiegoś frameworka) stałą np APP_BASE_PATH i przypisać do niej aktualną ścieżkę (o ile dobrze pamiętam to funkcja cwd() zwraca Ci aktualną ścięzkę).

Zakładam, że nie korzystasz z frameworków - więc moją ostatnią poradą zostaje chyba tylko zajrzenie w kod źródłowy popularnych frameworków i przyjrzenie się temu jak one rozwiązują opisany przez Ciebie problem. W symfony 3 zrobisz to np. tak -

$projectRoot = $this->get('kernel')->getProjectDir(); 

Prześledź działanie tej metody.

Właśnie o to mi chodziło. A powiedz mi proszę, czy przechowywanie zmiennej ze ścieżką pliku autoload w sesji to dobra praktyka? Później mogę się odwołać do niej w każdym pliku.

0

Co, dlaczego w sesji?

0

Autoloada nie ruszaj. Niech autoloader (np ten z Composera) będzie w pliku index.php, a dalej to już reszta instrukcji (np jakieś bootstrapy z frameworka). Troszkę niezrozumiale to napisałeś, ale w sesji nie trzymaj zbędnych ścieżek i autoloadow - moim zdaniem taka prsktyka nie ma to żadnego dobrego uzasadnienia - ew. napisz nam do czego to ma służyć.

0
Patryk27 napisał(a):

Co, dlaczego w sesji?

Muszę mieć ścieżkę do katalogu głównego 'costam/costam2/costam3/public_html' , nie mogę się odwołać jednoznacznie do niego z katalogów, który jest w drugiej gałęzi, dlatego muszę jakoś ustawić tę wartość w pliku index.php, który jest wywoływany jako pierwszy. Wtedy mam tę ścieżkę w każdym pliku w każdym folderze.

0

Czyli każdy plik php przeznaczony jest na oddzielna stronę? Po co Ci sesja? Wystarczy że zrobisz sobie include'a ze stałą do głównego folderu.

Polecam obadac jak wygląda trasa od żądania do odpowiedzi (request -> response) we wzorcu mvc - ułatwi Ci to zarządzanie plikami w projekcie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1