2012-03-05 12 views
12

Mam pewne dziwne problemy z file_get_contents po przeniesieniu mojej witryny do nowej domeny. Musiałem skonfigurować nową domenę i adres IP (używając Plesk), aby uzyskać nowy certyfikat ssl. Teraz mój plik file_get_contents wywołujący skrypt w tej samej domenie daje mi to:file_get_contents - nie można otworzyć strumienia: żądanie HTTP nie powiodło się! HTTP/1.1 404 Not Found

Nie udało się otworzyć strumienia: żądanie HTTP nie powiodło się! HTTP/1.1 404 Not Found

Jeśli zgłoszę tej samej zawartości przy użyciu file_get_contents na inny serwer działa dobrze, a jeśli zadzwonię www.google.com od zepsutego thats serwer, który działa, więc wydaje się być jedynie jeśli zadzwonię pod adres URL na tym samym serwerze!

Mam wrażenie, że może to mieć coś wspólnego z posiadaniem dwóch adresów IP z dwoma różnymi certyfikatami SSL na jednym serwerze, kiedy i file_get_contents/(strona indeksowa) serwera z serwera otrzymuję komunikat "to jest nowa domena, więc apache nie szuka właściwego wirtualnego hosta, gdy jest wywoływany z własnego serwera.

Aby wyjaśnić (oby!):

Na serwerze obsługującym domenę:

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'); 

daje "nie można otworzyć strumień! HTTP Żądanie nie powiodło HTTP/1.1 404 Not Found"

file_get_contents('http://www.google.com'); 

działa poprawnie

na innym serwerze:

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'); 

działa dobrze.

Próbowałem wyłączyć ssl i nadal mam ten sam problem.

+2

opublikowania kompletny kod pomoże Ci lepiej się prawidłowa odpowiedź –

+0

N ew B ee ma rację, ja Nie jestem pewien, czy to rozumiem. – Jack

+0

Czy możesz przetestować 'echo gethostbyname ('mydomain.com');' w twoim skrypcie? Pokaż nam swoją wirtualną sieć komputerową. – soju

Odpowiedz

5

Mam też ten problem, gdy pracuję na małym serwerze testowym w domu. Nazwa domeny zostanie rozwiązana na Twój zewnętrzny adres IP, a żądanie zostanie wysłane. Ponieważ jednak żądanie pochodzi z sieci, router nie rozpoznaje go jako zwykłego żądania. Prawdopodobnie ma interfejs sieciowy do jej konfiguracji i próbuje zwrócić stronę ze swojego własnego systemu zarządzania, który nie znajduje się w podanej ścieżce.

W tym przypadku pracowałem na komputerze z systemem Windows i mogłem go rozwiązać, dodając domenę, którą testowałem do mojego pliku hosts, podając 127.0.0.1 jako adres IP (lub adres IP urządzenia). serwer, jeśli jest to inna maszyna w tej samej sieci). W Linuksie powinno być podobne rozwiązanie.

Problem nie dotyczy PHP ani serwera, ale routera.

+0

wydaje się, że to jest problem (w moim identycznym przypadku), działający echo gethostbyname ("mydomain.com"); a pingowanie z mojego komputera dało 2 różne adresy IP – Jonathan

4

Większość hostingu zapewnia teraz blokadę parametru furl_open, który umożliwia użycie danych z zewnętrznego adresu URL za pomocą file_get_contents().

Można użyć CURL lub bibliotekę PHP klienta jak Guzzle

0

próbować to zrobić:

file_get_contents('https://mydomain.com?'.urlencode('limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12')); 
Powiązane problemy