![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 7.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Mam prośbę o porady na temat sposobu tworzenia linków w strukturze witryny generowanej w php, tak aby wszystko działało niezależnie od lokalizacji plików na serwerze.
Obecnie tworzę szkielet serwisu i mam wszystkie pliki umieszczone na swoim komputerze w katalogu, który jest ustawiony jako DocumentRoot dla Apache. U mnie jest to "D:/www". Niby wszystko działa ale: * docelowo serwis trafi na serwer providera i domyślam się, że znajdzie się wewnątrz jakiegoś przydzielonego mi katalogu w DocumentRoot, tak więc odniesienia bezwzględne staną się chyba nieaktualne, bo nie będą uwzględniały tego, że doszła jeszcze nazwa katalogu * nie wiem, czy w ogóle linki ze ścieżką bezwzględną do pliku na serwerze mają jakiś sens (mam na myśli linki nawigacyjne w strukturze witryny), ale w takim razie jak się pozbyć z URL całego członu ścieżki wskazującego na położenie mojej witryny na serwerze? * próbowałem stosować ścieżki względne, ale dzieje się coś dziwnego, to znaczy każde kolejne kliknięcie na przykład na link do "index.php" powoduje "dolepienie" do adresu kolejnego członu. Po kilku kliknięciach adres w przeglądarce wygląda mniej-więcej tak: Kod http://localhost/index.php/index.php/index.php/index.php/index.php A sam link, wygląda tak: Kod <a href:"index.php">index</a> Rozumiem, że jest to link "względny", który powoduje poszukiwanie pliku w bieżącym katalogu. Gdy zamieniam go na link bezwzględny: Kod <a href:"/index.php">index</a> wszystko działa jak należy. Ale co się stanie, gdy wszystkie pliki znajdą się w jakimś katalogu na serwerze? Wówczas będę musiał poprawiać wszystkie ścieżki bezwzględne. Zauważyłem, że linki na stronach nie zawiarają, żadnych członów, które określałyby lokalizację na serwerze u providera. A przecież na pewno nie wszysto jest umieszczane w jednym katalogu DocumentRoot. Na czym więc polega sztuka tworzenia dobrych linków, tak aby niezależnie od lokalizacji zawsze wszystko działało i nie powstawały zlepki jaki tworzą się u mnie przy zastaosowaniu ścieżki względnej jak w pierwszym przykładzie? Będę wdzięczny za wszelkie wskazówki. Temat jest podstawowy i pewnie był już wałkowany ale nie mogę nic znaleźć. Przemek |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 897 Pomógł: 40 Dołączył: 16.12.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ja używam $_SERVER['PHP_SELF'] i to mi wystarcza w 100%.
-------------------- how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
U mnie generacja wyglada o tak
Kod <a href='{"parametr:wartosc;parametr2:wartosci"|url}'>Link</a> Nietruno zauwazyc jest to modifier do smarty - on autmatycznie dodaje http://adresstrony.pl i inne potrzebne rzeczy. -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 7.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(czachor @ 2005-11-14 20:21:54) Ja używam $_SERVER['PHP_SELF'] i to mi wystarcza w 100%. A jak to zrealizować w praktyce? Jest taka sytuacja. Mam następującą strukturę plików, u siebie na komputerze: Kod D:/www <-- katalog ustawiony jako DocumentRoot dla Apache D:/www/abc <-- katalog z zawartością serwisu, który tworzę D:/www/abc/index.php <-- strona startowa, z której linki kierują zarówno z powrotem do index.php jak i do innych plików umieszczonych w katalogu src D:/www/abc/src <-- katalog z pozostałymi plikami .php tworzącymi witrynę D:/www/abc/css <-- katalog z plikami stylów D:/www/abc/grafika <-- katalog z grafikami dla wszystkich stron serwisu Zmienna $_SERVER['PHP_SELF'] zwraca mi całą ścieżkę do aktualnej lokalizacji oprócz początkowego katalogu "www", który ustawiony jest DocumentRoot dla Apache. Jednak domyślam się, że po umieszczeniu mojego katalogu na serwerze, strona otrzyma swój bazowy adres w domenie hosta, czyli np. www.mojastrona.domenahosta.pl. Jak wówczas "przetworzyć" ścieżkę zwracaną przez $_SERVER['PHP_SELF'], tak aby wygenerować linki zawierające poprawny URL do mojej strony wraz z podkatalogami ale bez początkowych ścieżek wskazujących na katalog na serwerze. Inaczej mówiąc jak ze ścieżki: "/DocumentRoot/katalog_uzytkownika/podkatalog_z_pilkami/plik.php" utworzyć poprawny URL, wyświetlany "na zewnątrz", który skieruje do właściwej domeny, czyli coś takiego: "http://www.mojastrona.pl/podkatalog_z_plikami/plik.php" Próbuję też cały czas wykorzystywać w URL ścieżki względne, to znaczy na przykład z pliku "/www/abc/index.php", aby dostać się do "/www/abc/src/jakisplik.php" używam <a href:"src/jakisplik.php"tojestlink</a>. Liczyłem na to, że obsługa takiego URL będzie po stronie przeglądarki, która sama zmodyfikuje aktualną ścieżkę w pasku. Niestety efekt jest taki, że do paska dopisywane są kolejne człony, po "index.php", tak, że tworzy się coraz dłuższy zlepek. Innym problemem, jest to, że po kliknięciu choćby jednego linka, katalog ze stylami css (w strukturze plików opisanej wyżej) nie jest odnajdowany i strona traci styl, chociaż jest wyświetlana. Zastanawiam się, czy wskazanie ścieżki do pliku css w "src=" nagłówka strony rządzi się jeszcze innymi prawami? Będę bardzo wdzięczy za porady, ponieważ nie mam jeszcze możliwości umieszczenia kodu na serwerze i przypisania mu poddomeny u hosta, dlatego nie mam jak sprawdzić jakie wartości zwróci mi PHP_SELF, a muszę napisać działający kod u siebie w domu. Może ktoś ma doświadczenie jak tworzyć poprawanie działające linki działające w obrębie struktury witryny, niezależnie od lokalizacji witryny w drzewie katalogów na serwerze i domeny, która jest jej przypisana? I jak tworzyć poprawne ścieżki "include" dla plików .php i "src=" dla .css? Pozdrawiam, Przemek! |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 1 Dołączył: 5.11.2005 Skąd: Bieruń city Ostrzeżenie: (0%) ![]() ![]() |
przykładowa struktura plików i katalogów:
d:/www/plik1.html d:/www/k1/index.html d:/www/k1/k2/plik2.html d:/www/k1/k2/plik3.html zawartość pliku d:/www/k1/index.html (localhost/k1/index.html): <a href="./../plik1.html">d:/www/plik1.html</a> <- plik katalog wyżej (./../) - ilość ../ określa ile katalogów wyżej <a href="./index.html">d:/www/k1/index.html</a> <- plik w tym samym katalogu (./) <a href="./k2/plik2.html">d:/www/k1/k2/plik2.html</a> <- plik w katalogu niżej (./NAZWA_KATALOGU) <a href="./k2/plik3.html">d:/www/k1/k2/plik3.html</a> <- to samo co wyżej myslę że to wszystko tłumaczy Ten post edytował dtb 15.11.2005, 10:36:40 -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 7.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo za pomoc. Problem został rozwiązany.
Mam jeszcze tylko jedno pytanie - czy jest możliwe połączenie adresowania "wzglęnego" w drzewie katalogów, z "przyjaznymi URLami" takimi jak opisane a artykule tutaj: php.pl - przyjazne urle ? Chcę zastosować właśnie taką metodę, ale powoduje ona powstawanie pozornej lokalizacji w nieistniejących katalogach, która skutecznie uniemożliwia tworzenie linków względnych. Jak sobie z tym poradzić? Generować każdy link po wcześniejszym sprawdzeniu PATH_INFO i wyrzuceniu "wirtualnych" katalogów ze ścieżki? Chodzi mi o to, że adres typu "index.php/informacje/artykuly/123" powoduje wykonanie kodu z index.php ale PATH_INFO zawiera całą ścieżkę, więc aby utowrzyć link z tej strony z powrtoem do index.php nie wystarczy już "./index.php" a potrzebne jest "./../../../index.php". Czyli adresowanie do tego samego pliku będzie różnie wyglądało, nawet z tego samego miejsca, w zależności od tego co znalazło się, jako "wirtualne" katalogi w URL i PATH_INFO. Czy można jakoś skutecznie rozwiązać ten problem? Przemek Ten post edytował Przemek1 15.11.2005, 13:11:01 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 476 Pomógł: 1 Dołączył: 5.11.2005 Skąd: Bieruń city Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował dtb 17.11.2005, 11:52:12 -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 7.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wielki dzięki za pomoc, dokładnie o to mi chodziło.
Pozdrawiam! Przemek |
|
|
![]()
Post
#9
|
|
![]() Administrator wortalu Grupa: Przyjaciele php.pl Postów: 960 Pomógł: 39 Dołączył: 21.10.2003 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@NuLL: Co to za modifier? Mozesz podac jakiegos linka? Czy to autorski ?
![]() Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 04:35 |