Как получить header удаленного файла средствами PHP 4

mschumilow

Новичок
Как получить header удаленного файла средствами PHP 4

Собственно нужно получить header удаленного файла средствами PHP 4
на PHP 5 я это делал:
PHP:
$arr_header = get_header($url);
А есть что-то типа этого в PHP 4?
 

r4sh

Новичок
fsockopen(), сокеты. Апач выдает заголовки для всех известных ему типов файлов.

P.S.: в запросе лучше использовать метод HEAD. Чтобы получать только заголовки
 

mschumilow

Новичок
Автор оригинала: Frol
у файлов нет "header".
в php5 нет функции get_header().
Извиняюсь на неправильную формулировку
header страницы которая отдает файлы....
в php5 есть функция get_headers....
 

Angerslave

Новичок
Frol

get_headers
(PHP 5)

get_headers — Fetches all the headers sent by the server in response to a HTTP request

mschumilow
r4sh посоветовал уже - сокеты. Вместо GET - HEAD, а потом парсить вручную.
 

mschumilow

Новичок
выдается ошибка:
fsockopen() [function.fsockopen]: php_network_getaddresses: gethostbyname failed
 

r4sh

Новичок
в fsockopen указывается хост, а путь до файла в HTTP заголовках, посылаемых сервером.
Например если урл www.site.ru/images/img.jpg, то в простейшем варианте заголовок будет

HEAD /images/img.jpg HTTP/1.1\r\n
Connection: close\r\n\r\n


Советую ознакомиться с RFC HTTP, или почитать хорошую литературу по apache.
 

mschumilow

Новичок
На будующее всем сталкивающимся с подобной проблеммой
PHP:
function get_headers($url,$format=0) {
		$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) {
			$head = "HEAD ".@$url_info['path']."?".@$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))) {
					if($format == 1) {
						$h2 = explode(':',$header);
						// the first element is the http header type, such as HTTP/1.1 200 OK,
						// it doesn't have a separate name, so we have to check for it.
						if($h2[0] == $header) {
							$headers['status'] = $header;
						}
						else {
							$headers[strtolower($h2[0])] = trim($h2[1]);
						}
					}
					else {
						$headers[] = $header;
					}
				}
			}
			return $headers;
		}
		else {
			return false;
		}
	}
 

disc

Новичок
Вот так можно решить задачу используя cURL:
PHP:
$url = "http://phpclub.ru/talk";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = curl_exec($ch);
 

disc

Новичок
mschumilow
необходимо иметь модуль curl, он у тебя есть, но видать закомментирован в php.ini в разделе extension
 
Сверху