Search code examples
phphttpprotocolshead

What is the easiest way to use the HEAD command of HTTP in PHP?


I would like to send the HEAD command of the Hypertext Transfer Protocol to a server in PHP to retrieve the header, but not the content or a URL. How do I do this in an efficient way?

The probably most common use-case is to check for dead web links. For this I only need the reply code of the HTTP request and not the page content. Getting web pages in PHP can be done easily using file_get_contents("http://..."), but for the purpose of checking links, this is really inefficient as it downloads the whole page content / image / whatever.


Solution

  • As an alternative to curl you can use the http context options to set the request method to HEAD. Then open a (http wrapper) stream with these options and fetch the meta data.

    $context  = stream_context_create(array('http' =>array('method'=>'HEAD')));
    $fd = fopen('http://php.net', 'rb', false, $context);
    var_dump(stream_get_meta_data($fd));
    fclose($fd);
    

    see also:
    http://docs.php.net/stream_get_meta_data
    http://docs.php.net/context.http