2010-05-23 6 views
9

mogę utworzyć ścieżki bez problemu, ale chcę wiedzieć, które z tych 3 metod jest najbardziej solidny i niezawodny i będzie działać na większości serwerów.Najlepsza metoda tworzenia ścieżki bezwzględnej w PHP? (Patrz 3 metody wymienione w środku)

Teraz używam metody 1 w moim skrypcie i niektórzy użytkownicy mają problemy ścieżce. Chcę tylko metodę, która będzie działać na dowolnej wersji php i prawie każdej konfiguracji serwera.

1. <?php echo $_SERVER['DOCUMENT_ROOT']; ?> 

2. <?php echo getcwd(); ?> 

3. <?php echo dirname(__FILE__); ?> 

Dziękuję bardzo za wszelkie ekspertyzy można zapewnić o tym!

+0

Wszystkie będą działać, ale mogą przynieść różne wyniki, ponieważ robią różne rzeczy. Co chcesz osiągnąć? –

+0

Jakie są "problemy ze ścieżką", które mają? – webbiedave

+0

Zasadniczo próbuję wskazać plik, który znajduje się w stałej lokalizacji i chcę, aby adres URL był ważny bez względu na to, skąd jest wywoływany. Na przykład: "/home/sitecom/public_html/myfile.php" Więc chcę dostać rootpath do pliku, który jest coś w stylu: "/ home/sitecom/public_html" Korzystanie z metody 1 wydaje się zrobić lewę przez większość czasu, ale dla kilku użytkowników nie działa zgodnie z oczekiwaniami. – mark

Odpowiedz

8

dirname(__FILE__) zawsze będzie działać, niezależnie od platformy lub serwera WWW. DOCUMENT_ROOT może działać inaczej w konfiguracjach serwerów (Apache kontra IIS vs Lighttpd vs nginex). cwd pokazuje wybrany katalog roboczy, który może być poprawny lub nie (możesz go zmienić w skrypcie). Więc sugeruję dirname(__FILE__)

+1

+1 Pierwszą rzeczą, dodaję do nowego projektu jest 'define ('root', realpath (dirname (__ FILE __)) '/'.);' – Alec

2
  • $ _SERVER Tablica przechowuje dane użytkownika, a zatem nie można ufać jest zależne od platformy (serwera WWW).

  • bieżący katalog roboczy może zależeć od punktu wejścia wniosku. Rozważmy następujący przykład (CLI):

    cd ~/mypath/mypath2 
    php myscript.php 
    cd ~/mypath 
    php mypath/myscript.php 
    
  • IMHO najbezpieczniejszym rozwiązaniem jest użycie dirname(__FILE__) lub __DIR__ (od PHP 5.3) jako ścieżkę pliku będzie zawsze taka sama (w stosunku do struktury projektów).

+0

OK, wydaje się, że konsensus jest, że dirname (__ FILE__) jest th sposób iść. Dziękuję bardzo za pomoc! – mark

+1

To nie jest prawidłowe, aby powiedzieć, że $ _SERVER jest generowane przez użytkownika. Wiele z nich pochodzi od strony serwera, a nie od klienta (na przykład można zaufać wartości "DOCUMENT_ROOT"). –

+0

masz rację w tej sprawie do wejścia DOCUMENT_ROOT (i innych oczywiście). ale nadal istnieją zmienne w tablicy $ _SERVER, które mogą zostać sfałszowane przez klienta/użytkownika. w kontekście wniosku dane są obce i nie należy im ufać ślepo. –

Powiązane problemy