2011-08-10 29 views
5

Wygląda to jak proste i wspólnego zadania, ale nie może zmusić go do pracy:Względne PHP Ścieżki dla file_get_contents

Mamy dwa z nas pracuje nad projektem i oba mają naszą konfigurację maszyn jak lokalne serwery w końcu ze środowiskiem produkcyjnym.

w głowie wszystko naszego projektu mamy PHP tak:

$feed = "/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

Jedynym sposobem, aby zmusić go do pracy jest, aby ustawić go jako pełny adres URL jak http://dev01.domain.com/lib/php/backend/gateway.php?action=history lub przez ustawienie go jako localhost jak ten:

$feed = "http://localhost/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

ten ostatni oczywiście działa na naszych lokalnych polach i prawdopodobnie będzie działać w produkcji, jak również, ale czy istnieje sposób na wykorzystanie ścieżek względnych być nieco czystsze?

+1

Zakładam, że oznacza to "root" ścieżek względnych. – zzzzBov

Odpowiedz

10
$feed = 'http://' . $_SERVER['HTTP_HOST'] . '/lib/php/backend/gateway.php?action=history'; 

Kiedy próbowałem -

$feed = "/lib/php/backend/gateway.php?action=history"; 
$json = file_get_contents($feed, true); 

Uświadom sobie, że prosisz PHP otworzyć plik na tej ścieżce w komputerze. Pliki nie mają ciągów zapytań, a wynikiem będzie kod PHP w tym pliku, a nie wynik jego wykonania.

Kiedy prosisz http://localhost/...., pytasz PHP otworzyć URL, dzięki czemu żądania HTTP do serwera WWW, który wykonuje kod i zwraca wyjście tego kodu.

Bardzo różne.

W rzeczywistości, dlaczego nie wstawiasz kodu do pliku gateway.php w bieżącym pliku? Nie ma powodu, aby wysyłać żądanie HTTP, aby wykonać kod na własnym serwerze.

2

konwersji /lib/php/backend/gateway.php?action=history w funkcji/CLASS metodą

np.

function gateway($action) 
{ 
    // existing code 
} 
$json = gateway('history'); 

Co więcej, nie ma potrzeby-tarło innego procesu HTTP
(co jest file_get_contents w tym przypadku)

Powiązane problemy