Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: instrukcja include - jak to wkońcu jest
Forum PHP.pl > Forum > PHP
wiruswww
Witam.
Nie od dziś już piszę w php ale natknąłem się na pewien problem, i mam pytanie jak to w końcu jest z include jeżeli mamy pewne drzewo katalogowe.
Załóżmy że:


  1. katalog
  2. katalog1
  3. plik1.php
  4. plik.php
  5. index.php


w pliku index.php mamy instrukcje
[PHP] index.php - pobierz, plaintext
  1. include('katalog/plik.php')
[PHP] index.php - pobierz, plaintext
i wszystko jest ok. Jak teraz powinna wyglądać instrukcja include w pliku plik.php aby załączyć plik1.php:
[PHP] plik.php - pobierz, plaintext
  1. include('katalog1/plik1.php')
[PHP] plik.php - pobierz, plaintext
czy
[PHP] plik.php - pobierz, plaintext
  1. include('katalog/katalog1/plik1.php')
[PHP] plik.php - pobierz, plaintext
Pytanie wynika z stąd iż pierwsze rozwiązanie drugie poprawnie na mojej lokalnej maszynie natomiast rozwiązanie pierwsze znalazłem w osCommerce, a nie działa u mnie. Jak to w końcu powinno być poprawnie? Może mam coś nie tak w konfiguracji PHP? Logika nibyjest prosta, do index wrzuca jest wszystko co jest w plik.php więc niby rozwiązanie drugie na logike wydaje się być poprawne. Dlaczego więc w osCommerce zrobione jest inaczej? Jak w końcu jest naprawdę z plikami includowanymi?


lipiec
Cytat(wiruswww @ 23.01.2010, 22:15:37 ) *
Witam.
Nie od dziś już piszę w php ale natknąłem się na pewien problem, i mam pytanie jak to w końcu jest z include jeżeli mamy pewne drzewo katalogowe.
Załóżmy że:


  1. katalog
  2. katalog1
  3. plik1.php
  4. plik.php
  5. index.php


w pliku index.php mamy instrukcje
[PHP] index.php - pobierz, plaintext
  1. include('katalog/plik.php')
[PHP] index.php - pobierz, plaintext
i wszystko jest ok. Jak teraz powinna wyglądać instrukcja include w pliku plik.php aby załączyć plik1.php:
[PHP] plik.php - pobierz, plaintext
  1. include('katalog1/plik1.php')
[PHP] plik.php - pobierz, plaintext
czy
[PHP] plik.php - pobierz, plaintext
  1. include('katalog/katalog1/plik1.php')
[PHP] plik.php - pobierz, plaintext
Pytanie wynika z stąd iż pierwsze rozwiązanie drugie poprawnie na mojej lokalnej maszynie natomiast rozwiązanie pierwsze znalazłem w osCommerce, a nie działa u mnie. Jak to w końcu powinno być poprawnie? Może mam coś nie tak w konfiguracji PHP? Logika nibyjest prosta, do index wrzuca jest wszystko co jest w plik.php więc niby rozwiązanie drugie na logike wydaje się być poprawne. Dlaczego więc w osCommerce zrobione jest inaczej? Jak w końcu jest naprawdę z plikami includowanymi?

Zauważ, że plik.php siedzi w katalogu "katalog1", w związku z tym, jeśli w plik.php ustawisz ściężkę includowania na "katalog/katalog1/plik1.php" to zostanie to potraktowane tak, że skrypt zacznie Tobie szukać takiej ścieżki: "katalog/katalog/katalog1/plik1.php".
Mógłbyś jeszcze odwołać się do pliku "plik1.php" w sposób taki: "../katalog1/plik1.php" - tylko po co?
Wydaję mi się, że tylko takie rozwiązanie jest najlepsze: "katalog1/plik1.php".
wiruswww
'plik.php' siedzi w 'katalog' nie w 'katalog1'
niby wszystko ok, tylko dlaczego nie działa mi to w ten sposób? zwalona konfiguracja apache? php? Przypomina mi się ze już chyba miałem kiedyś z tym problem przy małym skrypcie ale pozmieniałem parę wpisuwi było ok, i jakoś nie przywiązałem do tego większej uwagi a teraz już chce to wyjaśnić do końca.
Crozin
Odpowiedź jest prosta... zrezygnuj z ścieżek względnych na rzecz bezwzględnych... nigdy nie będziesz miał problemu wynikającego z kontekstu użycia ścieżki względnej. A żeby nie pisać każdorazowo:
Kod
/path/to/my/project/root/dir
Możesz sobie zadeklarować jakąś stałą na samym początku index.php:
  1. define('ROOT_DIR', dirname(__FILE__));
A potem przy podawaniu ścieżek dawać:
  1. require ROOT_DIR . '/path/to/file';
wiruswww
ok, jak najbardziej ok, ścieżki bezwzględne są super, ale moja dociekliwość nie daje mi spokoju, jak to powinno być w rzeczywistość z tym include?
Crozin
Przed każdym wywołaniem include daj sobie:
To będziesz wiedział dokładnie w jakim miejscu w systemie plików obecnie się znajdujesz = będziesz wiedział na co wskazuje dana ścieżka względna. winksmiley.jpg
wiruswww
Cytat(Crozin @ 23.01.2010, 23:28:52 ) *
Przed każdym wywołaniem include daj sobie:
To będziesz wiedział dokładnie w jakim miejscu w systemie plików obecnie się znajdujesz = będziesz wiedział na co wskazuje dana ścieżka względna. winksmiley.jpg


Przed jednym i drugi include jest to samo. Includowanie nie zmienia miejsca w drzewie katalogowym. Ale to nie wyjaśnia dlaczego w gotowym skrypcie osCommerce zastosowane jest rozwiązanie które teoretycznie powinno działać, a nie działa, a drugie rozwiązanie działa, a teoretycznie nie powinno. To moja konfiguracja serwera jest skopana, czy chłopaki od osCommerce mają coś nie halo?
Crozin
Być może w osc zmodyfikowane jest include_path
wiruswww
Raczej nie jest. A jak to jest u was z tym include, która konstrukcja jest poprawna?
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.