Pergunta

Gostaria de enviar o comando principal do protocolo de transferência de hipertexto para um servidor no PHP para recuperar o cabeçalho, mas não o conteúdo ou um URL. Como faço isso de uma maneira eficiente?

O caso de uso provavelmente mais comum é verificar se há links da Web mortos. Para isso, só preciso do código de resposta da solicitação HTTP e não do conteúdo da página. Obter páginas da web no PHP pode ser feito facilmente usando file_get_contents("http://..."), mas, com o objetivo de verificar links, isso é realmente ineficiente, pois baixa o conteúdo / imagem / imagem inteira / qualquer que seja.

Foi útil?

Solução

Como alternativa ao Curl, você pode usar as opções de contexto HTTP para definir o método de solicitação como HEAD. Em seguida, abra um fluxo (http wrapper) com essas opções e busque os meta -dados.

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

Veja também:
http://docs.php.net/stream_get_meta_data
http://docs.php.net/context.http

Outras dicas

Você pode fazer isso ordenadamente com ondulação:

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

Ainda mais fácil do que o curl - basta usar o phpget_headers()função que retorna uma matriz de todas as informações do cabeçalho para qualquer URL que você especificar. E outra maneira realmente fácil de verificar a existência de arquivos remotos é usarfopen()e tente abrir o URL no modo de leitura (você precisará ativar alias_url_fopen para isso).

Basta conferir o manual do PHP para essas funções, está tudo lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top