Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak sprawdzić czy strona znajduje się w podkatalogu?
Forum PHP.pl > Forum > PHP
starach
Już nie mam pomysłu na to.
Ze względu na konieczność zastosowania mod_rewrite muszę generować linki a do tego potrzebna jest mi domena.
Tylko co jeśli strona znajduje się w podkatalogu jak mam to sprawdzić ?
Wiem że jest to niewielki problem jednak chciałbym żeby skrypt wykrywał to automatycznie,
bez konieczności ręcznego wpisywania domeny i podkatalogu.
Przykładowo przy użyciu mod_rewrite mam coś takiego
DocumentRoot mam ustawiony na D:\WWW natomiast stronę z której wywołuję ten skrypt mam w podkatalogu strona
przez htaccess przekierowałem zapytanie do pliku w kolejnych podkatalogach test
link: http://localhost/strona/rewrite/htfytfyutf
Cytat
'QUERY_STRING' => ''
'REQUEST_URI' => '/strona/rewrite/htfytfyutf'
'SCRIPT_NAME' => '/strona/test/test/index.php'
'PHP_SELF' => string '/strona/test/test/index.php'
Tknęło mnie coś teraz i pomyślałem że można by zrobić to tak.
Kod
'DOCUMENT_ROOT' => 'D:/WWW'
'SCRIPT_FILENAME' => 'D:/WWW/strona/test/test/index.php'
'REQUEST_URI' => '/strona/rewrite/htfytfyutf'
Za pomocą strlen() sprawdzić długość DOCUMENT_ROOT i
od tego miejsca wyciąć SCRIPT_FILENAME ( zostało by /strona/test/test/index.php )
tylko nie wiem jeszcze jak mam porównać SCRIPT... z REQUEST_URI żeby zostało samo strona.
Jakieś pomysły ?
zimi
porównuj kolejne znaki tych ciągów ze sobą
jeśli znak na którejś pozycji zgadza się z drugim ciągiem dopisz go do jakiejś zmiennej
jeśli wszystko cały czas będzie się zgadzać i dojdziesz do slasha to będziesz miał to swoje "strona"
jeśli przed dojściem do slasha nastąpi różnica musisz zostać na poprzednim katalogu
trochę zmienie Twoje SCRIPT_FILENAME i obetne o to o co powiedziałeś...
Kod
'CIAG' => '/strona/retest/test/index.php'
'REQUEST_URI' => '/strona/rewrite/htfytfyutf'

zrobimy coś na wzór algorytmu
Kod
$tmp='';
//pierwszy(/) znak się zgadza i doszliśmy do slasha bo znak jest slashem
$katalog_docelowy .= $tmp.'/';
$tmp='';//zerowanie $tmp
//drugi znak się zgadza
$tmp.='s';//kolejne znaki podobnie, $tmp zawiera wartość "strona"
//doszliśmy do slasha
$katalog_docelowy .= $tmp.'/'; //$katalog_docelowy zawiera /strona/
$tmp='';
//kolejna się zgadza
$tmp.='r';// potem dopisujemy e
//dalej się nie zgadza więc wrzucamy return i $katalog_docelowy zostaje jaki był... czyli /strona/

mam nadzieję że dobrze zrozumiałem Twój problem i dobrze przedstawiłem Ci moją ideę

EDIT: dobra trochę za bardzo kombinuję:
  1. <?php
  2. $filename = '/strona/test/test/index.php';
  3. $request = '/strona/rewrite/htfytfyutf';
  4. $tab1 = explode('/', $filename);
  5. $tab2 = explode('/', $request);
  6. $tab = array_intersect_assoc($tab1, $tab2);
  7. echo implode($tab, '/');
  8. ?>
starach
No domyślam się że należu je teraz porównać pytanie tylko jest jak ?
Nie ma innej metody niż użycie warunków i nawiasów klamrowych {} ?
zimi
zedytowałem poprzedni post, zobacz...
starach
Dziękuję ci bardzo zimi smile.gif
  1. <?php
  2. // Kasowanie nazwy pliku
  3. $script_filename = strrev($_SERVER['SCRIPT_FILENAME']);
  4. $script_filename = strrev(substr($script_filename, strpos($script_filename, '/')));
  5. // Wycinanie ciagu znakow ze scierzki do pliku od htdocs
  6. $script_filename = substr($script_filename, strlen($_SERVER['DOCUMENT_ROOT']));
  7. // Porównywanie ciagow w celu wyszukania podkatalogow
  8. $common = array_intersect_assoc(explode('/', $script_filename), explode('/', $_SERVER['REQUEST_URI']));
  9. // Sprawdzenie czy polaczenie szyfrowane jest aktywne
  10. $https = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == true ? 's' : '';
  11. // Posklejanie wszystkiego do kupy
  12. $domain = 'http'.$https.'://'.$_SERVER['HTTP_HOST'].implode('/', $common).'/';
  13. ?>

http://localhost/test/getDomain.php Wynik: http://localhost/test/
http://localhost/getDomain.php Wynik: http://localhost/
mod_rewrite - przekierowanie z katalogu strona na podkatalog test
http://localhost/strona/afafdadfadfadfdaf Wynik: http://localhost/strona/
Będzie tylko problem z przekierowanie na podkatalog przy mod_rewrite (ex. z D:\WWW\strona na D:\WWW\ )
ponieważ w SCRIPT_FILENAME jest ścieżka do wykonywanego pliku. Czyli w tym przypadku było by to D:\WWW\plik.php,
ale z tym akurat da się żyć tongue.gif jeszcze raz dzięki.
zimi
małe sugestie
1. strrpos" title="Zobacz w manualu PHP" target="_manual
2. zamiast
  1. <?php
  2. $https = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == true ? 's' : '';
  3. ?>

w zupełności starczy:
  1. <?php
  2. $https = $_SERVER['HTTPS'] ? 's' : '';
  3. ?>


Natomiast reszta Twojego postu (czyli oprócz kodu i podziękowania biggrin.gif:P) jest dla mnie mało zrozumiała smile.gif
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.