Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ścieżka względna dołączonego pliku, jak uzyskać w najprostszy sposób?
WebCM
post 23.04.2011, 11:47:51
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Jak uzyskać ścieżkę względną dołączonego pliku w najprostszy sposób?

  1. dirname(__FILE__)

To nie jest ścieżka względna, tylko absolutna: C:\xampp\katalog\skryptu

Nie ma go także w tablicy $_SERVER, bo ona jest tworzona przed wywołaniem include().

Dla tych, co nie rozumieją:

  1. include 'katalog/skryptu/plik.php';
  2.  
  3. //W pliku katalog/skryptu/plik.php chcę uzyskać ścieżkę: katalog/skryptu/

Po co mi to? Aby wstawić do kodu HTML, np. <script src="">, a tam musi być ścieżka typu katalog/skryptu/


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
-krzotr-
post 23.04.2011, 13:18:11
Post #2





Goście







Może coś takiego ?

  1. <?php
  2.  
  3. $plik = '/home/test/abc.php';
  4.  
  5. $plik2 = '/home/test/jakis/katalog/plik.php';
  6.  
  7. echo substr( $plik2, strlen( dirname( $plik ) ) + 1 ); // jakis/katalog/plik.php


Zobacz jeszcze get_included_files

Ten post edytował krzotr 23.04.2011, 13:19:00
Go to the top of the page
+Quote Post
WebCM
post 26.04.2011, 00:02:09
Post #3





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Wykombinowałem na szybko coś takiego - działa tak samo jak z get_included_files:
  1. $dir1 = getcwd(); //katalog skryptu głównego
  2. $dir2 = __DIR__.'/'; //katalog skryptu obecnego + ukośnik
  3. $dir = str_replace('\\', '/', substr($dir2,strlen($dir1)+1));
Jeżeli chcecie ten kod wykorzystać, przetestujcie go, czy działa dla wszystkich możliwych przypadków.

Czy gra warta świeczki? Czy po prostu zabronić użytkownikom skryptu zmiany nazwy katalogu i kazać umieścić go tam, gdzie jest index.php czy tam inny skrypt (zazwyczaj w folderze głównym)? Wierzcie, że nie wszyscy umieją podać właściwą ścieżkę ręcznie.


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
darko
post 26.04.2011, 05:29:48
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(WebCM @ 26.04.2011, 01:02:09 ) *
Czy po prostu zabronić użytkownikom skryptu zmiany nazwy katalogu i kazać umieścić go tam, gdzie jest index.php czy tam inny skrypt (zazwyczaj w folderze głównym)? Wierzcie, że nie wszyscy umieją podać właściwą ścieżkę ręcznie.

Ustaw jakąś domyślną ścieżkę z możliwością jej zmiany. Co do kodu, to sprawdzałem na linuksie i nie działa, po prostu wyświetla pustą stronę, a nie prościej zrobić tak:
  1. echo substr(dirname($_SERVER['SCRIPT_NAME']) . '/', 1, strlen(dirname($_SERVER['SCRIPT_NAME']) . '/'));

?
// edit
jeszcze krócej:
  1. echo substr(dirname($_SERVER['SCRIPT_NAME']), 1, strlen(dirname($_SERVER['SCRIPT_NAME']))) . '/';


Ten post edytował darko 26.04.2011, 05:30:55


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
WebCM
post 26.04.2011, 11:30:16
Post #5





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Cytat
sprawdzałem na linuksie i nie działa, po prostu wyświetla pustą stronę
A użyłeś instrukcji echo bądź var_dump($dir)? Zrób tak:
  1. //Plik główny
  2. include 'katalog/innyplik.php';
  3.  
  4. //W pliku katalog/innyplik.php
  5. $dir1 = getcwd();
  6. $dir2 = __DIR__.'/';
  7. var_dump(str_replace('\\', '/', substr($dir2,strlen($dir1)+1)));

Nie zawsze warto polegać na tablicy $_SERVER. Niektóre serwery nie przekazują wszystkich danych. Użytkownik i tak będzie musiał podać ścieżkę do pliku, który dołącza. Przykład:
  1. //Bibliotekę (skrypt) trzeba dołączyć
  2. include 'sciezka/do/pliku.php';
  3. funkcja();
  4.  
  5. //Czy da się konkretnie uzyskać to, co użytkownik wpisał do include, czyli: sciezka/do/pliku.php?
  6. //Raczej nie, bo include nie jest funkcją, tylko instrukcją
  7. //Można i tak:
  8. include 'sciezka/do/pliku.php';
  9. funkcja('sciezka/do/');


Ten post edytował WebCM 26.04.2011, 11:30:36


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
darko
post 26.04.2011, 14:09:43
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(WebCM @ 26.04.2011, 12:30:16 ) *
A użyłeś instrukcji echo bądź var_dump($dir)?

Tak, var_dump($dir); zwróciło:
string(0) "" gdybym nie sprawdził, nie napisałbym, że sprawdziłem. Nic dziwnego, na linuksie nie ma ścieżek windowsowych (\\).


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
WebCM
post 26.04.2011, 14:36:09
Post #7





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Jeżeli oba pliki są w tym samym katalogu, pojawi się dokładnie string(0) "". Zauważ, że zamieniam \ na / po to, by po stronie klienta ścieżki były prawidłowe. Jeżeli nie będzie \ to str_relace() pozostawi ścieżkę bez zmian.


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
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: 24.06.2025 - 09:24