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);
?>
Дополнительные советы
- В функции 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);
- Можно использовать поточный контекст для установки правильного тайм-аута, не связываясь со значениями php.ini:
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1
))
);
file_get_contents("http://example.com/", 0, $ctx);
?>
- В некоторых случаях использования функции 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));
}
?>
- Кажется, file ищет файл внутри текущей директории, перед тем как обратиться к include path, даже если установлен флаг FILE_USE_INCLUDE_PATH.
Вроде бы сказано, что include_path – первая локация, в которой должен осуществляться поиск. Но я несколько раз бывал в ситуации, когда директория, содержащая включение файла, оказывалась первой в порядке поиска.