|
|
|
| Ответ 006 на задачу N 13.
С условиями задачи можно ознакомится по ссылке.
<?php // Запрос длины ресурса
if(isset($_GET['name']))
{ // получим ссылку и очистим её от возможных магических кавычек
$name = get_magic_quotes_gpc() ? stripslashes($_GET['name']): $_GET['name'];
// разберем её на составляющие
$url = parse_url($name);
$host = isset($url['host'])? $url['host'] : "www.softtime.ru";
$path = isset($url['path'])? $url['path'] : "/";
$port = isset($url['port'])? $url['port'] : 80;
if(isset($url['query'])) // вернем параметры запроса,
$path .= '?' . $url['query']; // если были в исходном URI
// попробуем соединиться с сервером
if(!($f = fsockopen($host, $port, $ern, $ers)))
die("Cannot connect to $host: Error #$ern ($ers)");
// и запросить заголовок (HEAD) отклика
fputs($f, "HEAD $path HTTP/1.0\r\nHOST: $host\r\n\r\n");
// прочтем ответ
for($reply = ''; !feof($f); ) $reply .= fgets($f);
fclose($f);
// Если положительный ответ не пришел
if(!preg_match("|^HTTP/[\d]+\.[\d]+[\s]+200[\s]|i", $reply))
{ $lines= explode("\n", $reply); echo $lines[0]; } // покажем ответ
else // определим и напечатаем длину
if(preg_match("|\nContent-length:[\s]+([\d]+)|i", $reply, $res))
echo "File $nm is ${res[1]} bytes length\r\n";
else // или весь ответ в случае неудачи.
echo "Cannot detect length of file $name\r\n<pre>"
.htmlspecialchars($reply)."</pre>";
}
?> <form><input name=name size=40
value = "http://www.softtime.ru/files/whois.zip" />
<input type=submit value=size? /> </form>
|
Trianon
http://www.softtime.ru/info/task.php?id_article=83 | |
|
|
|
|
|
|
|
для: SoftTime
(24.03.2006 в 19:44)
| | Работает. Ход с HEAD очень хитрый и хороший - в этом случае тело запроса не грузится и не нужно отслеживать лишний перевод строки между HTTP-заголовками и телом запроса. | |
|
|
|