PHP : récupérer les headers HTTP

WRInaute accro
Bonjour,
débutant en php, j'aimerais des renseignements pour savoir comment récupérer le Header HTTP renvoyé lors de la demande d'un fichier sur un serveur HTTP (j'ai cherché sur google, mais rien de compréhensible pour moi ^^).
En fait, j'aimerais récupérer la taille d'un fichier distant donnée par le Header HTTP (entra autre).

Pour simplifier, exactement comme le fait ce script là :
https://www.webrankinfo.com/outils/header.php.

Si on pouvait me donner plus d'infos (voire les sources du header.php ^^), ce serait réellement bienvenue.

Merci d'avance.
 
WRInaute occasionnel
Parfois il n'est pas fait mention du header content-length, c'est lorsque la connexion est rompue que le fichier est "fini" et qu'on peut en déduire la taille.
Donc d'un point de vue perfs, le fichier a transité complètement sur le réseau avant d'avoir pu connaître sa taille
 
WRInaute occasionnel
Pour récupérer les header, il suffit d'ouvrir une socket sur le serveur à contacter. Ensuite, tu fais:
Code:
HEAD /uri/a/retrouver HTTP/1.1
et tu lis tout ce que renvoit cette commande. C'est très simple!
 
WRInaute occasionnel
Deux possiblités:

1. Tu as PHP5: fonction get_headers disponible

2. Tu n'as pas PHP 5:
Code:
function read_headers($url)
{
	$url_info = parse_url($url);
	$port = isset($url_info['port']) ? $url_info['port'] : 80;
	$fp = @fsockopen($url_info['host'], $port, $errno, $errstr, 30);
	if (!$fp)
		return false;// erreur fsockopen

	$head = 'HEAD '.@$url_info['path'];
	$head .= '?'.@$url_info['query'];
	$head .= " HTTP/1.0\r\nHost: ".@$url_info['host']."\r\n\r\n";
	fputs($fp, $head);
	while (!feof($fp))
	{
		if ($header = trim(fgets($fp, 1024)))
		{
			$key = array_shift(explode(':', $header));
			if($key == $header)
				$headers[] = $header;
			else
				$headers[$key] = substr($header, strlen($key) + 2);
			unset($key);
		}
	}

	if (isset($headers['Location']) && (substr($headers['Location'], -1) == '?'))
		$headers['Location'] = substr($headers['Location'], 0, -1);

	return $headers;
}
 
Discussions similaires
Haut