Я хотел бы отправить команду HEAD протокола передачи гипертекста на сервер в PHP для получения заголовка, но не содержимого или URL-адреса. Как я могу сделать это эффективно?
Вероятно, наиболее распространенным вариантом использования является проверка мертвых веб-ссылок. Для этого мне нужен только код ответа HTTP-запроса, а не контент страницы. Получение веб-страниц в PHP можно легко с помощью file_get_contents("http://...")
, но для проверки ссылок это действительно неэффективно, так как оно загружает весь контент / изображение / все.
В качестве альтернативы завитка вы можете использовать параметры контекста 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
Вы можете сделать это аккуратно с помощью 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);
Даже проще, чем завиток – просто используйте get_headers()
PHP get_headers()
которая возвращает массив всей информации заголовка для любого указанного вами URL-адреса. И еще один реальный простой способ проверить наличие удаленного файла – использовать fopen()
и попытаться открыть URL-адрес в режиме чтения (для этого вам нужно включить allow_url_fopen).
Просто ознакомьтесь с руководством по PHP для этих функций, все там.
Похоже, груша имеет это: