Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak sprawdzić czy strona znajduje się w podkatalogu?, http://www.domena.pl/podkatalog_w_ktorym_jest_strona/index.php
starach
post 5.09.2007, 23:53:21
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


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 ?

Ten post edytował orglee 5.09.2007, 23:55:16
Go to the top of the page
+Quote Post
zimi
post 6.09.2007, 10:06:04
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


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. ?>


Ten post edytował zimi 6.09.2007, 10:17:24
Go to the top of the page
+Quote Post
starach
post 6.09.2007, 10:12:41
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


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 {} ?
Go to the top of the page
+Quote Post
zimi
post 6.09.2007, 10:18:25
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


zedytowałem poprzedni post, zobacz...
Go to the top of the page
+Quote Post
starach
post 6.09.2007, 13:43:07
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


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.

Ten post edytował orglee 6.09.2007, 13:46:35
Go to the top of the page
+Quote Post
zimi
post 6.09.2007, 17:05:29
Post #6





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


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
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.07.2025 - 17:10