Невозможно получить доступ к внешнему URL с помощью функции file() в PHP

У меня есть следующий код:

$url = 'http://' . $host . ':' . $port . $params;
$results = file( $url );

Я получаю следующее исключение:

file(http://someurl.com/asd/asd): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

Но я обращаюсь к URL(хранящемуся в переменной $url) прямо в браузере, он работает отлично. Почему у меня возникают проблемы при доступе к нему из PHP?

1 ответ

Решение

Это сообщение об ошибке:

HTTP / 1.0 403 Запрещено

... на самом деле идет прямо с сервера, к которому вы пытаетесь получить доступ. Так что это не проблема с выходом PHP для доступа к внешнему файлу.

Скорее, это проблема убедить сервер предоставить вам файл, как если бы он передавал его в веб-браузер.

Есть пара вопросов, которые я бы проверил:

  1. Защищен ли файл паролем? Веб-браузер сохранит введенный вами пароль и позволит вам повторно получить доступ к URL без повторного ввода пароля, но PHP не знает, какой пароль использовать.

  2. Возможно, сервер ограничивает доступ из не браузеров, проверяя строку агента пользователя?

  3. Возможно, сервер ограничивает доступ, если на вас не ссылаются с другой страницы того же сайта?

Одна вещь, которую вы могли бы попробовать, это использовать средство просмотра HTTP-заголовков онлайн, чтобы попытаться запросить файл напрямую. Вы можете поэкспериментировать с различными заголовками, пользовательскими агентами и т. Д., Чтобы увидеть, сможете ли вы воспроизвести проблему.

Если бы мне пришлось угадывать, мои деньги были бы связаны с первой проблемой - требованием пароля. Там нет никакого способа узнать, не зная фактический URL, хотя.


Если вы выясните, что именно мешает вам получить доступ к файлу, вам следует ознакомиться с оберткой http, контекстами потока и, в частности, с параметрами контекста потока http, чтобы узнать, как установить недостающую информацию из PHP. Есть способы указать пароль, пользовательский агент, заголовок реферера или любой другой произвольный заголовок HTTP.

Другие вопросы по тегам