Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

Заметки

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

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

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

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

<?php
$filename 
"http://www.server.com/index.php";
$fsize 0;
$fp fopen($filename"r");
while((
$str fread($fp1024)) != 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.server.com/downloads/archive.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
Accept-Ranges: bytes
Content-Length: 345977
Connection: close

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