file_get_contents

(PHP 4 >= 4.3.0, PHP 5)

file_get_contentsЧитает содержимое файла в строку

Описание

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

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

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

Замечание:

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

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

filename

Имя читаемого файла.

use_include_path

Замечание:

Начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path.

context

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

offset

Смещение, с которого начнется чтение оригинального потока.

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

maxlen

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

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

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

Ошибки

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

Примеры

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

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

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

<?php
// <= PHP 5
$file file_get_contents('./people.txt'true);
// > PHP 5
$file file_get_contents('./people.txt'FILE_USE_INCLUDE_PATH);
?>

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

<?php
// Читаем 14 символов, начиная с 21 символа
$section file_get_contents('./people.txt'NULLNULL2014);
var_dump($section);
?>

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

string(14) "lle Bjori Ro"

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

<?php
// Создаем поток
$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);
?>

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

Версия Описание
5.1.0 Добавлены аргументы offset и maxlen.
5.0.0 Добавлена поддержка контекста.

Примечания

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

Подсказка

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

Внимание

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

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

Коментарии

This functionality is now implemented in the PEAR package PHP_Compat.

More information about using this function without upgrading your version of PHP can be found on the below link:

http://pear.php.net/package/PHP_Compat
2005-01-31 01:23:03
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If, like me, you are on a Microsoft network with ISA server and require NTLM authentication, certain applications will not get out of the network. SETI@Home Classic and PHP are just 2 of them.

The workaround is fairly simple.

First you need to use an NTLM Authentication Proxy Server. There is one written in Python and is available from http://apserver.sourceforge.net/. You will need Python from http://www.python.org/.

Both sites include excellent documentation.

Python works a bit like PHP. Human readable code is handled without having to produce a compiled version. You DO have the opportunity of compiling the code (from a .py file to a .pyc file).

Once compiled, I installed this as a service (instsrv and srvany - parts of the Windows Resource Kit), so when the server is turned on (not logged in), the Python based NTLM Authentication Proxy Server is running.

Then, and here is the bit I'm really interested in, you need to tell PHP you intend to route http/ftp requests through the NTLM APS.

To do this, you use contexts.

Here is an example.

<?php

// Define a context for HTTP.
$aContext = array(
   
'http' => array(
       
'proxy' => 'tcp://127.0.0.1:8080'// This needs to be the server and the port of the NTLM Authentication Proxy Server.
       
'request_fulluri' => True,
        ),
    );
$cxContext stream_context_create($aContext);

// Now all file stream functions can use this context.

$sFile file_get_contents("http://www.php.net"False$cxContext);

echo 
$sFile;
?>

Hopefully this helps SOMEONE!!!
2005-11-15 04:47:18
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
the bug #36857 was fixed.
http://bugs.php.net/36857

Now you may use this code,to fetch the partial content like this:
<?php
$context
=array('http' => array ('header'=> 'Range: bytes=1024-', ),);
$xcontext stream_context_create($context);
$str=file_get_contents("http://www.fcicq.net/wp/",FALSE,$xcontext);
?>
that's all.
2006-08-04 04:55:39
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Use the previous example if you want to request the server for a special part of the content, IF and only if the server accepts the method.
If you want a simple example to ask the server for all the content, but only save a portion of it, do it this way:
<?php
$content
=file_get_contents("http://www.google.com",FALSE,NULL,0,20);
echo 
$content;
?>

This will echo the 20 first bytes of the google.com source code.
2006-12-05 14:52:27
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
[Editors note: As of PHP 5.2.1 you can specify `timeout` context option and pass the context to file_get_contents()]

The only way I could get get_file_contents() to wait for a very slow http request was to set the socket timeout as follows.

 ini_set('default_socket_timeout',    120);   
$a = file_get_contents("http://abcxyz.com");

Other times like execution time and input time had no effect.
2007-04-17 00:37:18
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If you're having problems with binary and hex data:

I had a problem when trying to read information from a ttf, which is primarily hex data. A binary-safe file read automatically replaces byte values with their corresponding ASCII characters, so I thought that I could use the binary string when I needed readable ASCII strings, and bin2hex() when I needed hex strings.

However, this became a problem when I tried to pass those ASCII strings into other functions (namely gd functions). var_dump showed that a 5-character string contained 10 characters, but they weren't visible. A binary-to-"normal" string conversion function didn't seem to exist and I didn't want to have to convert every single character in hex using chr().

I used unpack with "c*" as the format flag to see what was going on, and found that every other character was null data (ordinal 0). To solve it, I just did

str_replace(chr(0), "", $string);

which did the trick.

This took forever to figure out so I hope this helps people reading from hex data!
2007-07-11 17:38:51
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
Seems file looks for the file inside the current working (executing) directory before looking in the include path, even with the FILE_USE_INCLUDE_PATH flag specified.

Same behavior as include actually.

By the way I feel the doc is not entirely clear on the exact order of inclusion (see include). It seems to say the include_path is the first location to be searched, but I have come across at least one case where the directory containing the file including was actually the first to be searched.

Drat.
2007-12-03 10:56:11
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
I decided to make a similar function to this, called file_post_contents, it uses POST instead of GET to call, kinda handy...

<?php
function file_post_contents($url,$headers=false) {
   
$url parse_url($url);

    if (!isset(
$url['port'])) {
      if (
$url['scheme'] == 'http') { $url['port']=80; }
      elseif (
$url['scheme'] == 'https') { $url['port']=443; }
    }
   
$url['query']=isset($url['query'])?$url['query']:'';

   
$url['protocol']=$url['scheme'].'://';
   
$eol="\r\n";

   
$headers "POST ".$url['protocol'].$url['host'].$url['path']." HTTP/1.0".$eol
               
"Host: ".$url['host'].$eol
               
"Referer: ".$url['protocol'].$url['host'].$url['path'].$eol
               
"Content-Type: application/x-www-form-urlencoded".$eol
               
"Content-Length: ".strlen($url['query']).$eol.
               
$eol.$url['query'];
   
$fp fsockopen($url['host'], $url['port'], $errno$errstr30); 
    if(
$fp) {
     
fputs($fp$headers);
     
$result '';
      while(!
feof($fp)) { $result .= fgets($fp128); }
     
fclose($fp);
      if (!
$headers) {
       
//removes headers
       
$pattern="/^.*\r\n\r\n/s";
       
$result=preg_replace($pattern,'',$result);
      }
      return 
$result;
    }
}
?>
2008-01-15 17:58:26
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
This is a nice and simple substitute to get_file_contents() using curl, it returns FALSE if $contents is empty.

<?php
function curl_get_file_contents($URL)
    {
       
$c curl_init();
       
curl_setopt($cCURLOPT_RETURNTRANSFER1);
       
curl_setopt($cCURLOPT_URL$URL);
       
$contents curl_exec($c);
       
curl_close($c);

        if (
$contents) return $contents;
            else return 
FALSE;
    }
?>

Hope this help, if there is something wrong or something you don't understand let me know :)
2008-04-02 16:12:36
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Setting the timeout properly without messing with ini values:

<?php
$ctx 
stream_context_create(array(
   
'http' => array(
       
'timeout' => 1
       
)
    )
);
file_get_contents("http://example.com/"0$ctx);
?>
2008-04-15 05:38:31
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
A UTF-8 issue I've encountered is that of reading a URL with a non-UTF-8 encoding that is later displayed improperly since file_get_contents() related to it as UTF-8. This small function should show you how to address this issue:

<?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));
}
?>
2008-08-10 05:34:33
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
In my dev environment with a relatively low-speed drive (standard SATA 7200RPM) reading a 25MB zip file in 10 times...

<?php

$data 
= `cat /tmp/test.zip`;
// 1.05 seconds

$fh fopen('/tmp/test.zip''r');
$data fread($fhfilesize('/tmp/test.zip'));
fclose($fh);
// 1.31 seconds

$data file_get_contents('/tmp/test.zip');
// 1.33 seconds

?>

However, on a 21k text file running 100 iterations...

<?php

$data 
= `cat /tmp/test.txt`;
// 1.98 seconds

$fh fopen('/tmp/test.txt''r');
$data fread($fhfilesize('/tmp/test.txt'));
fclose($fh);
// 0.00082 seconds

$data file_get_contents('/tmp/test.txt');
// 0.0069 seconds

?>

Despite the comment about file_get_contents being faster do to memory mapping, file_get_contents is slowest in both of the above examples. If you need the best performance out of your production box, you might want to throw together a script to check out which method is fastest for what size files on that particular machine, then optimize your code to check the file size and use the appropriate function for it.
2009-06-09 17:35:19
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
On Centos 5, and maybe other Red Hat based systems, any attempt to use file_get_contents to access a URL on an http  port other than 80 (e.g. "http://www.example.com:8040/page") may fail with a permissions violation (error 13) unless the box you are running php on has its seLinux set to 'permissive' not 'enforcing' . Otherwise the request doesn't even get out of the box, i.e. the permissions violation is generated locally by seLinux.
2009-10-28 07:00:16
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Sometimes you might get an error opening an http URL.
even though you have set "allow_url_fopen = On" in php.ini

For me the the solution was to also set "user_agent" to something.
2010-01-14 08:22:58
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If you want to check if the function returned error, in case of a HTTP request an, it's not sufficient to test it against false. It may happen the return for that HTTP request was empty. In this case it's better to check if the return value is a bool.

<?php
$result
=file_get_contents("http://www.example.com");
if (
$result === false)
{
   
// treat error
} else {
   
// handle good case
}
?>

[EDIT BY thiago: Has enhacements from an anonymous user]
2010-03-27 16:03:34
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
If your file_get_contents freezes during several seconds, here is maybe your answer:

Beware that the default keepalive timeout of Apache 2.0 httpd is 15 seconds. This is true for HTTP/1.1 connections, which is not the default behavior of file_get_contents but you can force it, especially if you are trying to act as a web browser. I don't know if this is also the case for HTTP/1.0 connections.

Forcing the server to close the connection would make you gain those 15 seconds in your script:

<?php
$context 
stream_context_create(array('http' => array('header'=>'Connection: close')));
$content file_get_contents("http://www.example.com/test.html");
?>

Another way of resolving slowness issues is to use cURL or fsockopen. Bear in mind that contrary to the behavior of web browsers, file_get_contents doesn't return the result when the web page is fully downloaded (i.e. HTTP payload length = value of the response HTTP "Content-Length" header) but when the TCP connection is closed.
I hope this behavior will change in future releases of PHP.
This has been experienced with PHP 5.3.3.
2010-11-21 15:17:28
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
The offset is 0 based.  Setting it to 1 will skip the first character of the stream.
2010-12-04 09:33:07
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If working file is bigger than 64kb and you getting deadlock. Your buffer is overflow. Here are two way how to avoid that.
1) use temporary file for descriptor
<?php
  $descriptorspec 
= array(
   
=> array("file""/tmp/ens/a.ens","r"),  // stdin is a pipe that the child will read from
   
=> array("file""/tmp/ens/a.html","w"),  // stdout is a pipe that the child will write to
   
=> array("file""/tmp/ens/error-output.txt""a"// stderr is a file to write to
 
);
?>

2) inline read using stream_set_blocking. PHP doesn't proper handle last part of file.
<?php
  $READ_LEN 
64*1024;
 
$MAX_BUF_LEN 2*$READ_LEN;

 
$url "http://some.domain.com:5984/".$db."/".$member."/contents";
 
$src fopen($url,"r");

 
$cwd '/tmp';
 
$cmd['enscript'] = "/usr/bin/enscript";
 
$cmd['enscript-options'] = " -q --language=html --color -Ejcl -o -";
 
$descriptorspec = array(
   
=> array("pipe""r"),  // stdin is a pipe that the child will read from
   
=> array("pipe""w")   // stdout is a pipe that the child will write to
 
);

 
$ph=proc_open($cmd['enscript']." ".$cmd['enscript-options'],$descriptorspec,$pipes,$cwd);

 
stream_set_blocking($src,0);
 
stream_set_blocking($pipes[0],0);
 
stream_set_blocking($pipes[1],0);

 
$CMD_OUT_OPEN TRUE$k 0;
  while (!
feof($pipes[1]) || !feof($src) || $k 0) {
    if (!
feof($src) && $k+$READ_LEN <= $MAX_BUF_LEN) {
     
$input .= fread($src,$READ_LEN);
     
$k strlen($input);
    }
    if (
$k 0) {
     
$l fwrite($pipes[0],$input);
     
$k -= $l;
     
$input substr($input,$l);
    }
    if (
$CMD_OUT_OPEN && $k == && feof($src)) {
     
fclose($pipes[0]);
     
$CMD_OUT_OPEN FALSE;
    }
   
$output fread($pipes[1],$READ_LEN);
   
$outputn str_replace("<H1>(stdin)</H1>","",$output);
        echo 
$outputn;
  }

 
fclose($pipes[1]);

 
$return_value proc_close($ph);
?>
2010-12-06 05:07:44
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
When using a URI with a login / password (HTTP or FTP, for an example), you may need to urlencode the password if it contains special characters.
Do not urlencode the whole URI, just the password.

Don't do :
urlencode('ftp://login:mdp%?special@host/dir/file')

Do :
'ftp://login:' . urlencode('mdp%?special') . '@host/dir/file';

Might seem obvious, but is worth noting.
2010-12-31 05:57:23
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
read text per line and convert to array

for example, the input file is input.txt
the input file containt text below

one
two
three
four
five

++++++++++++++++++++++++++

read value per line

<?php
$data 
file_get_contents("input.txt"); //read the file
$convert explode("\n"$data); //create array separate by new line

for ($i=0;$i<count($convert);$i++) 
{
    echo 
$convert[$i].', '//write value by index
}
?>

++++++++++++++++++++++++++

Output :

one, two, three, four, five,
2011-02-08 11:10:23
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
here is another (maybe the easiest) way of doing POST http requests from php using its built-in capabilities. feel free to add the headers you need (notably the Host: header) to further customize the request.

note: this method does not allow file uploads. if you want to upload a file with your request you will need to modify the context parameters to provide multipart/form-data encoding (check out context.http ) and build the $data_url following the guidelines on http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

<?php
/**
make an http POST request and return the response content and headers
@param string $url    url of the requested script
@param array $data    hash array of request variables
@return returns a hash array with response content and headers in the following form:
    array ('content'=>'<html></html>'
        , 'headers'=>array ('HTTP/1.1 200 OK', 'Connection: close', ...)
        )
*/
function http_post ($url$data)
{
   
$data_url http_build_query ($data);
   
$data_len strlen ($data_url);

    return array (
'content'=>file_get_contents ($urlfalsestream_context_create (array ('http'=>array ('method'=>'POST'
           
'header'=>"Connection: close\r\nContent-Length: $data_len\r\n"
           
'content'=>$data_url
           
))))
        , 
'headers'=>$http_response_header
       
);
}
?>
2011-02-22 09:30:38
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
At least as of PHP 5.3, file_get_contents no longer uses memory mapping.

See comments on this bug report:

http://bugs.php.net/bug.php?id=52802
2011-03-04 13:26:24
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If you want to insert tracking-scripts into your shopping-system, some scripts doesn't support intelligent detection of HTTPS, so i made a script i put on the server that rewrites 'http' to 'https' in the script, assuming everything has to be UTF-8 encoded (as a fallback it makes a redirect).

It is important that the HTTPS-source DOES exist!

<?php

function file_get_contents_utf8($fn) {
   
$opts = array(
       
'http' => array(
           
'method'=>"GET",
           
'header'=>"Content-Type: text/html; charset=utf-8"
       
)
    );

   
$context stream_context_create($opts);
   
$result = @file_get_contents($fn,false,$context);
    return 
$result;
}
header("Content-Type: text/html; charset=utf-8");
$tPath "URL YOU WANT TO MODIFY";
$result file_get_contents_utf8("http://".$tPath);

if( 
$result == false){
   
header("Location: https://".$tPath); // fallback
   
exit();
}
else{
    echo 
mb_ereg_replace("http","https",$result);
}
?>
2011-07-05 08:45:44
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
I experienced a problem in using hostnames instead straight IP with some server destinations.

If i use file_get_contents("www.jbossServer.example/app1",...)
i will get an 'Invalid hostname' from the server i'm calling.

This is because file_get_contents probably will rewrite your request after getting the IP, obtaining the same thing as :
file_get_contents("xxx.yyy.www.zzz/app1",...)

And you know that many servers will deny you access if you go through IP addressing in the request.

With cURL this problem doesn't exists. It resolves the hostname leaving the request as you set it, so the server is not rude in response.
2011-10-11 07:16:38
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
For those having this problem when trying to get_file_contents(url):

Warning: file_get_contents(url): failed to open stream: HTTP request failed!  in xx on line yy

If you are behind a SonicWall firewall, read this:
https://bugs.php.net/bug.php?id=40197
(this little line: uncheck a box in the internal settings of the firewall labled "Enforce Host Tag Search with for CFS")

Apparently by default SonicWall blocks any HTTP request without a "Host:" header, which is the case in the PHP get_file_contents(url) implementation.

This is why, if you try to get the same URL from the same machine with cURL our wget, it works.

I hope this will be useful to someone, it took me hours to find out :)
2011-12-22 01:30:10
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
file_get_contents can do a POST, create a context for that first:

$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => "Content-Type: text/xml\r\n".
      "Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
    'content' => $body,
    'timeout' => 60
  )
);
                       
$context  = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
2012-04-16 15:17:20
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
For those who use file_get_contents for JSON or other RESTful services - like my architecture did for a big site - this will probably help a lot.

We struggled with having the site using get urls that would go through our load balancer instead of hitting the local server.

What we did was load this function through a local url and set the Host: header for our virtualhost entries on the site we wanted to laod.

This code solved our issue:
<?php

//set the header context stream for virtualhost lookup
$context stream_context_create(array('http' => array('header' => 'Host: www.VIRTUALHOSTDOMAIN.com')));

//use a localhost url or alternatively 127.0.0.1 ip
$url 'http://localhost/rest-service/?get-user&id=######';

//fetch the data through webserver using the Host http header we set
$data json_decode(file_get_contents($url0$context));

//verify you have your data
var_dump($data);

?>
2012-04-26 00:25:22
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
This is an easy way to trigger scripts by listening for POSTs. I simply point a service's webhook url to the script, which file_get_contents("php://input"), cast to an array, and then simplexml_load_string() to parse it and use one of the keys' data as the parameter for my script.
2012-06-08 21:16:33
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Negative offsets don't work as you might expect (like in http://php.net/substr for example)

So
<?php echo file_get_contents(__FILE__falsenull, -10?>
does the same as
<?php echo file_get_contents(__FILE__falsenull0?>

To get the last 10 characters of a file, you need to use
<?php echo file_get_contents (__FILE__falsenull, (filesize (__FILE__) - 10)) ?>
2012-09-02 13:47:40
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Reading all script input is simple task with file_get_contents, but it depends on what SAPI is being used.

Only in Apache, not in CLI:
<?php
  $input 
file_get_contents("php://input");
?>

Only in CLI, not in Apache:
<?php
  $input 
file_get_contents("php://stdin");
?>

In Apache php://stdin will be empty, in CLI php://input will be empyt instead with no error indication.
2012-10-09 12:29:36
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
If you are using file_get_contents() function to retrieve HTTP url and printing HTTP content, you can also send original content-type header using $http_response_header and header() function;

<?php

foreach ($http_response_header as $value) {
    if (
preg_match('/^Content-Type:/i'$value)) {
       
// Successful match
       
header($value,false);
    }
}

?>
2013-03-19 23:08:05
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
It is important to write the method in capital letters like "GET" or "POST" and not "get" or "post". Some servers can respond a 400 error if you do not use caps in the method.
2014-01-07 05:31:35
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
The funniest thing there is that seeking on non local files may, or may not work. This is unpredictable, and thus should throw rather than doing some magical stuff.
Also trying to read non local file which doesn't exists results in FALSE returned and no single warning emitted.
2014-02-20 16:29:46
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
Автор:
Keep in mind that if you use a URL as the filename attribute, and the external resource is not reachable, the function will not return FALSE but instead an exception will be thrown.

So, in this case, instead of doing this:

$content = file_get_contents('https://en.wikipedia.org/wiki/Cat#/media/File:Large_Siamese_cat_tosses_a_mouse.jpg');

if ($content === false) {
    // Handle the error
}

Do this:

try {
    $content = file_get_contents('https://en.wikipedia.org/wiki/Cat#/media/File:Large_Siamese_cat_tosses_a_mouse.jpg');

    if ($content === false) {
        // Handle the error
    }
} catch (Exception $e) {
    // Handle exception
}
2016-12-22 10:55:58
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
file_get_contents does not normally respect PHP's flock locking, i.e. advisory locking.

You can workaround this with some extra code to request a shared lock, like...

<?php
$tmp 
fopen($path'rb');
@
flock($tmpLOCK_SH);
$contents file_get_contents($path);
@
flock($tmpLOCK_UN);
fclose($tmp);
?>
2016-12-30 02:34:09
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
A simple way to parse side effect array $http_response_header into a better assoc format.

<?php

/**
 * http_parse_response_header()
 *   Parse $http_response_header produced by file_get_contents().
 *
 * @param array $header
 *   Supposed $http_response_header or array alike.
 * @param array
 *   Assoc array of the parsed version.
 */
function http_parse_response_header($header) {
  if (empty(
$header)) return []; // return empty array
  // parse status line
 
$status_line array_shift($header);
  if (!
preg_match('/^(\w+)\/(\d+\.\d+) (\d+) (.+?)$/'$status_line$matches))
    throw new 
Exception("misformat status line: {$status_line}");
  return [
   
'PROTOCOL' => $matches[1],
   
'PROTOCOL_VERSION' => $matches[2],
   
'STATUS_CODE' => $matches[3],
   
'STATUS' => $matches[4],
  ] + 
array_reduce($header, function ($carry$line) {
   
// parse content line
   
list($key$value) = explode(':'$line2);
    if (!isset(
$carry[$key])) {
     
$carry[$key] = trim($value);
    } else {
     
$carry[$key] .= "\n" trim($value);
    }
    return 
$carry;
  }, []);
}

?>

Also added to Github Gist:
https://gist.github.com/yookoala/017f056c34a169514fbf0cd7cc5b2e78
2018-08-29 07:54:08
http://php5.kiev.ua/manual/ru/function.file-get-contents.html
You don't want to use file_get_contents for web crawling
use curl:  book.curl
2018-12-22 14:43:49
http://php5.kiev.ua/manual/ru/function.file-get-contents.html

    Поддержать сайт на родительском проекте КГБ