|
|
|
| Ответ 003 на задачу N 13.
С условиями задачи можно ознакомится по ссылке.
Функция принимает два параметра: хост и путь к файлу, размер которого необходимо определить. Если в адресной строке не указаны переменные host и path, то определяется размер файла http://www.softtime.ru/files/whois.zip (этот кусок можно удалить). Вот результат выполнения скрипта
Размер файла [b]www.softtime.ru/files/whois.zip[\b]: 541
|
Код самой функции
<?php
//////////////////////////////////////////////////
// Функция определения размера удаленного файла
// $Id: postfilesize.php, Zero Cool Exp $
//////////////////////////////////////////////////
function postfilesize($hostname, $filepath)
{
// Открываем соединение
$line = '';
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
if( !isset($fp) )
{
echo $errstr . "(" . $errno . ")<br />\n";
}
else
{
// Формируем HTTP-запрос для передачи его серверу
$headers = "GET " . $filepath . " HTTP/1.1\r\n";
$headers .= "Host: " . $hostname . "\r\n";
$headers .= "Connection: Close\r\n\r\n";
// Отправляем запрос
fwrite($fp, $headers);
$end = false;
while( !$end )
{
$line = fgets($fp, 1024);
( trim($line == '') ) ? $end = true : $out[] = $line;
}
// Закрываем соединение
fclose($fp);
}
// Объединяем содержимое массива $out[] в одну строку
$lines = implode(" ", $out);
// Определяем число байтов в файле
preg_match("|Content-Length:[\s]+([\d]+)|i", $lines, $matches);
// Возвращаем результат
return $matches[1];
}
// Увеличиваем время работы скрипта
set_time_limit(180);
// Получаем размер файла на удаленном сервере
$host = ( isset($_GET['host']) ) ? $_GET['host'] : 'www.softtime.ru';
$path = ( isset($_GET['path']) ) ? $_GET['path'] : '/files/whois.zip';
echo 'Размер файла <b>' . $host . $path . '</b>: ' . postfilesize($host, $path);
?>
|
http://www.softtime.ru/info/task.php?id_article=83 | |
|
|
|
|
|
|
|
для: SoftTime
(20.03.2006 в 22:39)
| | Ждем-с критики | |
|
|
|
|
|
|
|
для: SoftTime
(20.03.2006 в 22:39)
| | Работает, но больно уж код хитрый. В результате этого (а так бывает всегда когда применяется хитрый код) имеется ошибка - скрипт загрузит весь файл, а не чистые HTTP-заголовки. А если файл в несколько гигабайт - сколько придётся ждать ответа и сколько памяти выделять? Убедится в том, что файл грузится полностью можно просто выводом содержимого $lines. | |
|
|
|