2012-09-11 10 views
6

Próbuję nauczyć się lepszego sposobu, aby powrócić do katalogu głównego. Słyszałem, że używanie $ _SERVER nie jest najbezpieczniejszym sposobem. Zastanawiam się, czy istnieje lepszy sposób. , więc mogłem uzyskać coś takiego na adres url example.com/exp/my.php

Oto co mam.

include ($_SERVER['DOCUMENT_ROOT'].'/cpages/cmain/func/init.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/toppart.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/boxes/image.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/bottonpart.php'); 

zmienić go

define ('DOCUMENT_ROOT', dirname(__FILE__)); 
include (DOCUMENT_ROOT.'/cpages/cmain/func/init.php'); 
include(DOCUMENT_ROOT.'/cpages/toppart.php'); 
include(DOCUMENT_ROOT.'/cpages/boxes/image.php'); 
include(DOCUMENT_ROOT.'/cpages/bottonpart.php'); 

ale teraz to daje mi błąd

Warning: include(C:\xampp\htdocs\backbone\image/cpages/cmain/func/init.php) 

i ($_SERVER['DOCUMENT_ROOT'] nie oddał go mi ten błąd jest ich sposobem na to naprawić?

+1

Dlaczego ['$ _SERVER'] (http://www.php.net/manual/en/reserved.variables.server.php)' ['DOCUMENT_ROOT'] 'być niebezpieczne? –

+3

Zobacz to pytanie: http: // stackoverflow.com/questions/390276/how-to-programowo-określ-dokument-root-in-php –

+0

@ JonathonReinhart nie jestem pewien, ale lepiej jest szukać bezpieczniejszego sposobu, który znasz –

Odpowiedz

4

Problem polega na tym, że nie można polegać na cokolwiek w tablicy $ _SERVER, ponieważ możliwe jest uzyskanie różnych wartości.

Więc musisz następujące zasady:

  1. Jeśli pisania kodu publicznego, umieścić ścieżkę w pliku konfiguracyjnym. Wtedy jeśli $ _SERVER nie jest poprawne na serwerze użytkownika, może je zastąpić. Możesz pomóc w dokończeniu konfiguracji za pomocą DOCUMENT_ROOT, jeśli chcesz użyć kilku prostych reguł (patrz poniżej).

  2. Jeśli piszesz kod na własny użytek, który będzie przechodził tylko pomiędzy serwerem lub dwoma, a następnie przyjmij, że DOCUMENT_ROOT jest poprawny, i rwwrite go, jeśli przenosisz serwery i potrzebujesz.


Jak zapewnić domyślne DOCUMENT_ROOT jeśli pre-kompilacji zmiennej config.

  1. Na Apache, sprawdź CONTEXT_DOCUMENT_ROOT. DOCUMENT_ROOT jest prawie zawsze bezpieczny, ale jest kilka miejsc, w których może być źle - i tak jest w przypadku podanego linku. Jeśli Apache używa mod_alias lub mod user_dir. W takich przypadkach należy użyć bezpieczniejszego CONTEXT_DOCUMENT_ROOT. Ale zauważ, że Apache dodawał tylko CONTEXT_DOCUMENT_ROOT przez miesiąc, więc jeśli nie masz najnowszej instalacji, musisz powrócić na DOCUMENT_ROOT.
  2. DOCUMENT_ROOT - patrz wyżej
  3. Zastosowanie PATH_TRANSLATED (mniejsza długość PHP_SELF) do contruct ścieżkę do bieżącego katalogu roboczego.
  4. Użyj SCRIPT_FILE_NAME (mniejszej długości PHP_SELF), aby utworzyć ścieżkę do bieżącego katalogu roboczego.
  5. Użyj zmienna globalna __DIR__ do katalogu prądu roboczego

Potem, kiedy masz te dane, należy sprawdzić plik wiesz istnieje w tym katalogu - a jeśli tak, to prawdopodobnie dostał właściwą drogę . Jeśli nie, spróbuj następnego razem.

+0

dzięki, możesz spróbować –

Powiązane problemy