Какой самый простой способ использовать команду HEAD HTTP в PHP? - PullRequest
12 голосов
/ 09 октября 2009

Я хотел бы отправить команду HEAD протокола передачи гипертекста на сервер в PHP для получения заголовка, но не содержимого или URL-адреса. Как мне сделать это эффективно?

Вероятно, наиболее распространенным вариантом использования является проверка на наличие мертвых веб-ссылок. Для этого мне нужен только код ответа HTTP-запроса, а не содержимое страницы. Получение веб-страниц в PHP может быть легко выполнено с использованием file_get_contents("http://..."), но для проверки ссылок это действительно неэффективно, поскольку загружается весь контент страницы / изображения / что угодно.

Ответы [ 4 ]

20 голосов
/ 09 октября 2009

Вы можете сделать это аккуратно с помощью cURL :

<?php
// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");

// This changes the request method to HEAD
curl_setopt($ch, CURLOPT_NOBODY, true);

// grab URL and pass it to the browser
curl_exec($ch);

// Edit: Fetch the HTTP-code (cred: @GZipp)
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

// close cURL resource, and free up system resources
curl_close($ch);
18 голосов
/ 10 октября 2009

В качестве альтернативы curl вы можете использовать опции контекста http для установки метода запроса на HEAD. Затем откройте поток (http wrapper) с этими параметрами и получите метаданные.

$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);

см. Также:
http://docs.php.net/stream_get_meta_data
http://docs.php.net/context.http

4 голосов
/ 10 октября 2009

Даже проще, чем curl - просто используйте функцию PHP get_headers(), которая возвращает массив всей информации заголовка для любого указанного вами URL. И еще один очень простой способ проверить наличие удаленного файла - использовать fopen() и попытаться открыть URL-адрес в режиме чтения (для этого необходимо включить allow_url_fopen).

Просто ознакомьтесь с руководством по PHP для этих функций, оно там есть.

2 голосов
/ 09 октября 2009

Кажется, что груша имеет это:

http://pear.php.net/manual/en/package.http.http.head.php

...