У меня возникают некоторые странные проблемы с файлом_get_contents после переноса моего сайта в новый домен. Я должен был создать новый домен и IP-адрес (используя Plesk), чтобы получить новый сертификат ssl. Теперь мой файл_get_contents, вызывающий скрипт в том же домене, дает мне следующее:
не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.1 404 не найден
Если я назову тот же URL-адрес, используя file_get_contents на другом сервере, он отлично работает, и если я вызову www.google.com с сервера, который не работает, значит, похоже, если я вызову url на одном и том же сервере!
У меня такое чувство, что это может иметь какое-то отношение к двум IP-адресам с двумя разными сертификатами ssl на одном сервере, когда i file_get_contents / (индексная страница) сервера с сервера я получаю страницу plesk «это новый домен» поэтому его, как и apache, не ищет правильный виртуальный хост, когда его вызывали из его собственного разъема.
Прояснить (надеюсь!):
На сервере, на котором размещен домен:
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');
дает «не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.1 404 Not Found»
file_get_contents('http://www.google.com');
работает правильно
На другом сервере:
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');
работает отлично.
Я попытался отключить ssl, и у меня все еще есть та же проблема.
У меня тоже была эта проблема, когда я работал на небольшом тестовом сервере дома. Имя домена разрешено для вашего внешнего IP-адреса и отправляется запрос. Но поскольку запрос поступает из вашей сети, маршрутизатор не распознает его как обычный запрос. Возможно, у него есть веб-интерфейс для его настройки и пытается вернуть страницу из собственной системы управления, которая не найдена по указанному вами пути.
В этом случае я работал на ПК с ОС Windows, и я мог бы решить эту проблему, добавив домен, который я тестировал в свой файл hosts
, указав 127.0.0.1 в качестве IP-адреса (или IP-адрес сервера, если он это еще одна машина в той же сети). Думаю, в Linux должно быть похожее решение.
Проблема не в PHP или на вашем сервере, а в вашем маршрутизаторе.
Большинство хостов теперь блокируют параметр furl_open
который позволяет вам использовать file_get_contents()
для загрузки данных с внешнего URL-адреса.
Вы можете использовать CURL или клиентскую библиотеку PHP
такую как Guzzle
Попробуйте сделать это:
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'));