Помогите подправить функцию определения размера файла на серваке

Stanisov
На сайте с 15.09.2009
Offline
44
504

Помогите подправить функцию определения размера файла на серваке

Просто на форуме делаю удобную вещь, при постинге ссылки на файл с определенным расширением, выводиться его размер.... Но проблема в том, что размер файла выводиться аж в конце всего сообщения =(

function filesize_url($url) /* Вычисляем размер удаленного файла */
{
return ($data = file_get_contents($url)) ? fsize_kb(strlen($data)) : false; // fsize_kb() - функция перевода из байтов в привычный вид, ее не стал сдесь описывать
}

function search($string) /* Функция обработки удаленных файлов */
{
$arr = array('php','php3','inc','phtml','htm','html','xhtml','wml','asp','pl','cgi'); # расширения которые не подходят для вычисления размера
preg_match('/<a href="(.*?)"(.*?)>(.*?)<\/a>/si', $string, $a); # ищем ссылку
//print_r($a);
$f = basename($a[1]); # достаем имя файла
if($f)
{
$ext = explode(".",$f); # достаем расширение
if(!empty($ext) && !in_array($ext,$arr)) # если в массиве нет не подходящих расширений, вычисляем размер
{
return $string = preg_replace('/<a href="(.*?)"(.*?)>(.*?)<\/a>/si', '<a href="\\1"\\2>\\3</a>', $string).' '.filesize_url($a[1]); // дописал в конец функцию, определения размера... хотя знаю что это не верно
}
}
}

Получается , если я допустим обрабатываю сообщение с ссылкой на файл print search($message)

то выходит

блаблаблаблабла http://www.google.com/mp3/song.mp3 балабалаблаблабла 500 кб

Мне нужно чтоб рядом с файлом был размер, как это сделать?


Мобильный Форум (http://forum.mobslay.com) MsBB Города Луганска приглашает всех мобильных жителей на обоюдные конференции
[umka]
На сайте с 25.05.2008
Offline
456
#1

preg_replace('/<a href="(.*?)"(.*?)>(.*?)<\/a>/sie', "'<a href=\"\\1\"\\2>\\3</a>'.filesize_url('\\1')", $string);

?! :)

Но при этом не нужно забывать, что это будет нехилый лишний трафик.

Лучше функцию переделать так, чтобы она слала только запрос HEAD, и из него брала размер.

Лог в помощь!
Stanisov
На сайте с 15.09.2009
Offline
44
#2

Спасибо большое и на этом, а если через header, там Content-Length парсить надо?

[umka]
На сайте с 25.05.2008
Offline
456
#3

Ага, делать например curl-ом, чтоб проще было, и ставить CURLOPT_NOBODY.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий