Przyjęta odpowiedź Pekki jest niepełna i, w ogólnym kontekście, myląca. Jeśli plik jest podany jako ścieżka względna, wywoływana konstrukcja języka include
będzie go szukać w następujący sposób.
Najpierw przejdzie przez ścieżki zmiennej środowiskowej include_path
, którą można ustawić za pomocą ini_set
. Jeśli to się nie powiedzie, przeszuka katalog własny skryptu wywołującego dirname(__FILE__)
( __DIR__
z php> = 5.3). Jeśli to również się nie powiedzie, tylko wtedy przeszuka katalog roboczy! Po prostu okazuje się, że domyślnie zmienna środowiskowa include_path
zaczyna się od .
, czyli aktualnego katalogu roboczego. Jest to jedyny powód, dla którego szuka najpierw w bieżącym katalogu roboczym. Zobacz http://php.net/manual/en/function.include.php .
Pliki są dołączane na podstawie podanej ścieżki do pliku lub, jeśli nie została podana, określonej ścieżki include_path. Jeśli plik nie zostanie znaleziony w include_path, funkcja include sprawdzi w końcu własny katalog skryptu wywołującego i bieżący katalog roboczy, zanim zakończy się niepowodzeniem.
Tak więc prawidłowa odpowiedź na pierwszą część pytania jest taka, że ma znaczenie, gdzie znajduje się dołączony skrypt wywołujący. Odpowiedź na ostatnią część pytania jest taka, że początkowy katalog roboczy, w kontekście serwera WWW, jest katalogiem wywoływanego skryptu, skryptu, który zawiera wszystkie pozostałe, podczas gdy jest obsługiwany przez PHP. W kontekście wiersza poleceń początkowy katalog roboczy jest tym, czym jest, gdy php jest wywoływany po znaku zachęty, niekoniecznie katalogiem, w którym znajduje się wywołany skrypt. Bieżący katalog roboczy, jednak może ulec zmianie w czasie wykonywania z funkcji PHP chdir
. Zobacz http://php.net/manual/en/function.chdir.php .
Ten akapit został dodany w celu skomentowania innych odpowiedzi. Niektórzy wspominali, że poleganie na include_path
jest mniej niezawodne, dlatego lepiej jest używać pełnych ścieżek, takich jak ./path
lub __DIR__ . /path
. Niektórzy posunęli się nawet do stwierdzenia, że poleganie na samym katalogu roboczym .
nie jest bezpieczne, ponieważ można go zmienić. Jednak czasami trzeba polegać na wartościach środowiskowych. Na przykład możesz chcieć ustawić include_path
pusty, aby katalog skryptu wywołującego był pierwszym miejscem, które będzie przeszukiwał, nawet przed bieżącym katalogiem roboczym. Kod może być już napisany i regularnie aktualizowany ze źródeł zewnętrznych i nie chcesz ponownie wstawiać prefiksu za __DIR__
każdym razem, gdy kod jest aktualizowany.