PHP HTTP HEAD komutu kullanmak için en kolay yolu nedir?

5 Cevap php

Ben başlığı almak için PHP bir sunucu Köprü Metni Aktarım Protokolü HEAD komutu göndermek ister, ama içeriği veya bir URL değil. Bu verimli bir şekilde nasıl yapabilirim?

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.

5 Cevap

Kıvırmak için bir alternatif olarak HEAD için istek yöntemini ayarlamak için http bağlamı seçenekleri kullanabilirsiniz. Daha sonra bu seçenekleri ile (http sarıcı) akışı açın ve meta veri getirebilir.

$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

Sen ile düzgün yapabilirsiniz 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);

Kıvrılma daha kolay - sadece PHP sizin belirlediğiniz herhangi bir URL için tüm başlık bilgisi içeren bir dizi döndürür get_headers() işlevini kullanabilirsiniz. Ve uzaktan dosya varlığını kontrol etmek için başka gerçek kolay yolu (bunun için allow_url_fopen etkinleştirmeniz gerekir) fopen() kullanımı ve okuma modunda URL açmak için çalışmaktır.

Sadece bu fonksiyonlar için PHP manuel kontrol, orada hepsi.

Bunu yapmanın en kolay yolu, isteği önce kıvırmak yapılandırmak için bu seçenekleri kullanarak sayfanın sadece başlıklarını almak için curl kullanmaktır.

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');

Sadece http yanıt başlıklarını almak için php curl kullanarak kesin uygulamaları bu blog post ayrıntılı olarak belirtilmiştir.