Php file get contents authorization

file_get_contents с базовой HTTP-авторизацией на основе сетевого подключения

Я использую file_get_contents () с базовой авторизацией HTTP, чтобы получить контент от моего $url :

$url = "http://example.com"; $cred = sprintf('Authorization: Basic %s', base64_encode('username:password')); $opts = array( 'http' => array( 'method' => 'GET', 'header' => $cred ) ); $ctx = stream_context_create($opts); $data = file_get_contents($url, false, $ctx); 

Когда у меня есть правильное имя пользователя и пароль в моем коде, я могу получить контент из URL совершенно нормально, независимо от того, к какому сетевому соединению я был подключен.

Но я хочу сделать это на основе сетевого подключения. Например, если я подключился к своей локальной сети, он может получать содержимое с URL-адреса, не спрашивая имя пользователя и пароль, но если я подключился к любому другому сетевому подключению, пользователю нужно будет ввести имя пользователя и пароль.

Если я не ошибаюсь, мне нужно использовать HTTP authentication with PHP Однако я не знаю, как я могу интегрировать его в мой код и заставить его выполняться на основе сетевого подключения, но не всегда.

Буду очень признателен, если кто-нибудь сможет мне помочь в этом вопросе.

Решение

Основная проблема — определить, к какой сети вы подключены. Ты должен бежать ipconfig или же ifconfig может быть, даже route Команда для проверки / анализа, к какой сети вы подключены. Если вы решили эту проблему, вы можете использовать простой if () заявление, чтобы включить имя пользователя / пароль или нет.

Читайте также:  Int to bool java

Другие решения

Источник

Setting an authorization header when using file_get_contents with PHP

Going through some of my old lists of blog post ideas this weekend. While it’s not something I’ve needed for a minute, it’s still something worth taking about. How to set an authorization header when using PHP’s wonderful file_get_contents() method.

Similar to an old post of mine talking about specifying a User Agent, we’ll be working with a “stream context” that will be passed to file_get_contents() .

This should work similarly with a other authorization types, like Bearer , but for this post, we’ll be using a Basic authorization.

Something to note, when passing in a Basic header, you’ll want to encode the user name and password combination in base64 format. The format of the user name and password will be colon delimited like this: username:password .

To create the stream context, we’ll need to pass in an array that tells it that we’d like to set an HTTP header, and include the relevant authorization information:

$credentials = base64_encode('username:password'); $options = ['http' => ['header' => "Authorization: Basic $credentials"]]; $context = stream_context_create($options); $response = file_get_contents('http://domain/path/to/uri', false, $context); 

Not much to it, and if need be, you can combine additional headers as part of the options!

Good stuff? Want more?

100% Fresh, Grade A Content, Never Spam.

Источник

Using Authentication And file_get_contents()

Note: This post is over two years old and so the information contained here might be out of date. If you do spot something please leave a comment and we will endeavour to correct.

Using file_get_contents() to fetch the contents of a file is quite a common practice. This might be just to get the contents of a text file or to get the ImageCache module in Drupal to pre-cache images. The file_get_contents() function can get a local or remote file and is usually run like this.

However, when trying to use this function to communicate with an authenticated server you will see the following error appearing.

To get around this issue you will need to pass a third parameter to the file_get_contents() function that causes the function to use a context. This context will pass an additional Authorization header to the server and is created through a function called stream_context_create(). Here is all the code you need to use file_get_contents() in an authenticated manner.

 array( 'header' => "Authorization: Basic " . base64_encode("$username:$password") ) )); $data = file_get_contents($url, false, $context);

The second parameter is for the addition of a flag and is skipped here by using a null value, but false is also applicable. For more information about what flags are available see the file_get_contents() page on the PHP manual.

Phil Norton

Phil is the founder and administrator of #! code and is an IT professional working in the North West of the UK. Graduating in 2003 from Aberystwyth University with an MSc in Computer Science Phil has previously worked as a database administrator, on an IT help desk, systems trainer, web architect, usability consultant, blogger and SEO specialist. Phil has lots of experience building and maintaining PHP websites as well as working with associated technologies like JavaScript, HTML, CSS, XML, Flex, Apache, MySQL and Linux.

Want to know more? Need some help?

Let us help! Hire us to provide training, advice, troubleshooting and more.

Support Us!

Please support us and allow us to continue writing articles.

Источник

file_get_contents

Данная функция похожа на функцию file() с той лишь разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до length байт. В случае неудачи, file_get_contents() вернёт false .

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.

Замечание:

Если вы открываете URI, содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .

Список параметров

Замечание:

Можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path. Только помните, что если вы используете строгую типизацию, то так сделать не получится, поскольку FILE_USE_INCLUDE_PATH имеет тип int . В таком случае используйте true .

Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение null .

Смещение, с которого начнётся чтение оригинального потока. Отрицательное значение смещения будет отсчитываться с конца потока.

Поиск смещения ( offset ) не поддерживается при работе с удалёнными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но результат будет непредсказуемым, так как функция работает на буферизованном потоке.

Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.

Возвращаемые значения

Функция возвращает прочтённые данные или false в случае возникновения ошибки.

Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

Ошибки

Будет сгенерирована ошибка уровня E_WARNING в случаях, если не удастся найти filename , задан length меньше нуля, или поиск по смещению offset в потоке завершится неудачно.

Когда file_get_contents() вызывается в каталоге, в Windows ошибка генерируется E_WARNING , а с PHP 7.4 также в других операционных системах.

Список изменений

Версия Описание
8.0.0 Параметр length теперь допускает значение null .
7.1.0 Добавлена поддержка отрицательных значений offset .

Примеры

Пример #1 Получить и вывести исходный код домашней страницы сайта

Пример #2 Поиск файлов в include_path

// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents ( ‘./people.txt’ , true );
// Иначе
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>

Пример #3 Чтение секции файла

// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( ‘./people.txt’ , FALSE , NULL , 20 , 14 );
var_dump ( $section );
?>

Результатом выполнения данного примера будет что-то подобное:

Пример #4 Использование потоковых контекстов

// Создаём поток
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);

$context = stream_context_create ( $opts );

// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых обёрток URL, их возможности, замечания по использованию и список предопределённых констант в разделе Поддерживаемые протоколы и обёртки.

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify . PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обёртки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

Смотрите также

  • file() — Читает содержимое файла и помещает его в массив
  • fgets() — Читает строку из файла
  • fread() — Бинарно-безопасное чтение файла
  • readfile() — Выводит файл
  • file_put_contents() — Пишет данные в файл
  • stream_get_contents() — Читает оставшуюся часть потока в строку
  • stream_context_create() — Создаёт контекст потока
  • $http_response_header

Источник

Оцените статью