PHP: знакомимся с функцией file_get_contents()

Функция PHP file get ontents() используется для считывания файла в строку. Если применять ее для дистанционного считывания, не забудьте, что любой URL-адрес со специальными символами должен быть правильно закодирован при помощи urlencode().

Синтаксис:

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )

Пример использования file_get_contents():

<?php

echo file_get_contents("names.txt");
?>

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

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

Дополнительная информация

file_get_contents() должна стать приоритетной функцией для считывания содержимого файла в строку. Она задействует метод отображения файла в память.

Одно из основных отличий между функциями file() и file_get_contents() заключается в том, что последняя считывает содержимое в строку, начиная с указанного параметра offset, и до maxlen. А file() считывает содержимое в массив.

Версии и история изменений в PHP

Функция file get contents PHP работает с PHP 4 >= 4.3.0, PHP 5, PHP 7.

Параметр offset появился в PHP 5.1.
Параметр maxlen также появился в PHP 5.1.

Связанные функции

Вам также следует знать о следующих PHP-функциях:

file() - считывает весь файл в массив;
fgets() - считывает строку из указанного файла;
fread() - производит бинарно-безопасное чтение файла;
readfile() - выводит файл;
file_put_contents() - записывает строку в файл;
stream_get_contents() - считывает остаток потока в строку;
stream_context_create() - создаёт контекст потока.

Параметры

filename

Параметр filename функции PHP file get contents используется для указания имени файла. Это обязательный параметр.

use_include_path

Параметр use_include_path используется для указания, может ли константа FILE_USE_INCLUDE_PATH (из файла php.ini) использоваться для запуска поиска include path. Это необязательный параметр.

context

Параметр context используется для указания контекста, созданного функцией stream_context_create(). Если не нужен произвольный контекст, можно опустить этот параметр при помощи NULL. Это необязательный параметр.

offset

Параметр offset используется для указания смещения, с которого в исходном потоке начинается считывание. Отрицательное значение offset позволяет начинать смещение с конца потока. Это необязательный параметр.

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

maxlen

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

Наглядные примеры

file get contents PHP пример использования:

<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>

Приведённый выше код позволяет получить и вывести исходный код страницы указанного сайта. В следующем примере показано, как считать фрагмент данных файла:

<?php
// Считывание четырнадцати символов, начиная с 21-го.
$section = file_get_contents('story.txt', NULL, NULL, 20, 14);
var_dump($section);
?>

В следующем примере показано, как использовать контекст потока для дистанционного открытия файла:

<?php
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: enrn" .
              "Cookie: visitor=EGFE129Frn"
  )
);

$context = stream_context_create($opts);
$file = file_get_contents('http://www.example.com/', false, $context);
?>

Дополнительные советы

  1. В функции file get contents используется POST. Для этого сначала нужно создать контекст:
$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => "Content-Type: text/xmlrn".
                           "Authorization: Basic ".base64_encode("$https_user:$https_password")."rn",
        'content' => $body,
        'timeout' => 60
    )
);

$context  = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
  1. Можно использовать поточный контекст для установки правильного тайм-аута, не связываясь со значениями php.ini:
<?php
$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
    ))
);

file_get_contents("http://example.com/", 0, $ctx);
?>
  1. В некоторых случаях использования функции PHP file get contents http возникает проблема с кодировкой UTF-8 при считывании URL-адреса с кодировкой отличной от UTF-8. Это происходит потому, что по умолчанию используется UTF-8. Приведенная ниже функция решает эту проблему:
<?php
function file_get_contents_utf8($fn) {
    $content = file_get_contents($fn);
    return mb_convert_encoding($content, 'UTF-8',
      mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}
?>
  1. Кажется, file ищет файл внутри текущей директории, перед тем как обратиться к include path, даже если установлен флаг FILE_USE_INCLUDE_PATH.

Вроде бы сказано, что include_path – первая локация, в которой должен осуществляться поиск. Но я несколько раз бывал в ситуации, когда директория, содержащая включение файла, оказывалась первой в порядке поиска.

Валентин Сейидовавтор-переводчик статьи «PHP file_get_contents() Function»