Главная страница статей --> Хитрости при программировании php, заметки по базам данных

Определение размера удаленного файла

Источник: realcoding.net

При определении размера удаленного файла большое значение имеет, то, какой потенциальный объем имеет файл.

Можно выделить следующие задачи определения размера удаленного файла:

1. Определение размера небольшого удаленного файла (html, php и т.п.)
2. Определение размера большого удаленного файла (zip, rar, mp3 и т.п.)

Определение размера небольшого удаленного файла

<?php

$filename
= http://www.webobzor.net/index.php;
$fh = fopen($filename, r);
while((
$str = fread($fh, 1024)) != null) $fsize += strlen($str);

echo
Размер файла: .$fsize;

?>

Открываем файл $filename, читаем с него данные fread по 1024 байта, до тех пор, пока эти данные не равны нулю (null). Одновременно определяем длину полученных данных strlen и их сумму $fsize.


Определение размера большого удаленного файла

Как вы уже догадались, метод, описанный выше не подходит для больших файлов, так как при этом что бы получить размер файла его необходимо было бы полностью прочитать, а это равнозначно его скачиванию на локальный компьютер. Поэтому для удаленных файлов, имеющий большой размер, используется другой подход, основанный на чтении мета тегов:

<?php

function fsize($path)
{
$fp = fopen($path,r);
$inf = stream_get_meta_data($fp);
fclose($fp);
foreach(
$inf[wrapper_data] as $v)
if (
stristr($v,content-length))
{
$v = explode(:,$v);
return
trim($v[1]);
}
}

$filesize = http://www.res.goldpages.com.ru/downloads/icons/karbon.zip;
echo
fsize($filesize);

?>

В данной ситуации читаются данные не файла, а мета тегов, которые возвращаются при его открытии. При этом функция stream_get_meta_data возвращает массив данных, в котором содержатся сведения о файле, в том числе значение размера файла:

HTTP/1.1 200 OK
Date
: Fri, 20 Oct 2006 09:31:16 GMT
Server
: Apache/1.3.37 (Unix) FrontPage/5.0.2.2623 PHP/4.4.4 with Suhosin-Patch mod_ssl/2.8.28 OpenSSL/0.9.7d-p1
Last
-Modified: Thu, 12 Oct 2006 15:07:41 GMT
ETag
: 61a0dc-54779-452e5a3d
Accept-Ranges: bytes
Content
-Length: 345977
Connection
: close

Остается лишь найти тег Content-Length (размер файла) и считать данные из строки.



Похожие статьи:
- PHP 6 на подходе
- Все о мета тегах
- Собираем Apache + PHP + XML для Linux.
- Третий тип XSS: Межсайтовый скриптинг через DOM
- Предзагрузка картинок
- Загрузка файлов на FTP
- Некоторые критерии выбора хостинга
- Защита от автоматической регистрации при помощи картинки
- Правила хорошего поведения при обмене ссылками
- Логи в Apache
- Подсветка ссылки
- Шрифты и CSS
- Микроформаты


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]