1

Тема: Як взнати розмір файла на віддаленному сервері?

Привіт всім. Як можна дізнатися розмір файла на віддаленому сервері?
думав так:

$url = "http://".$_POST['name']."/robots.txt";
$Headers = @get_headers($url);
print_r($Headers);

та потім шукати розмір в цьому масиві, тільки проблема в тому що інколи розмір там записаний, а інколи ні.
Потім думав так:

    $fp = fopen($url,"r");
    $inf = stream_get_meta_data($fp);
    //print_r($inf);
    fclose($fp);
    
    echo $inf['unread_bytes'];

но і тут проблемка, буває що розмір виводить правильно, а інколи виводить 0, но якщо декілька раз обновити сторінку то може вивести все вірно. Не знаю чому так відбувається...
Хто має якусь ідею нащот цього?

2

Re: Як взнати розмір файла на віддаленному сервері?

Очевидно, що це неможливо, не прочитавши весь потік. Відповідь на запит URL формується веб-сервером; якщо він може і хоче, то повідомить розмір відповіді; але ніщо не забороняє йому на цей запит викликати PHP, який динамічно сформує відповідь - а відтак, сервер і сам не знатиме відповіді на ваше питання, доки PHP не надішле йому EOF. А на цей момент ви вже можете прочитати 90% цього файла.

Подякували: Kasper1

3

Re: Як взнати розмір файла на віддаленному сервері?

function getSize($file) {

    $array = get_headers($file);

    foreach ($array AS $key => $value) {

        if (preg_match('#Content-Length:#i', $value)) {

            $res = $array[$key];

        }

    }

    if (!empty($res)) {

        $size = explode(" ", $res);

        return $size[1];

    } else {

        return 'error';

    }



}

function format_size($size){
$metrics[0] = 'байт' ;
$metrics[1] = 'Кбайт' ;
$metrics[2] = 'Мбайт' ;
$metrics[3] = 'Гбайт' ;
$metrics[4] = 'Тбайт' ;
$metric = 0;
while(floor($size / 1024) > 0){
$metric ++;
$size /= 1024;
}
$result = round($size, 1) . " " .
(isset($metrics[ $metric]) ? $metrics[ $metric] : '???' );
return $result;
}

Використання:

echo format_size(getSize('http://www.site.com/file.txt'));
Подякували: Kasper, Monolith, 221VOLT3

4

Re: Як взнати розмір файла на віддаленному сервері?

Зробив так:

    $fopen = fopen($url,"r");

    $homepage = file_get_contents($url);
    fclose($fopen);
echo mb_strlen($homepage, '8bit');

5

Re: Як взнати розмір файла на віддаленному сервері?

Kasper написав:

Зробив так:

    $fopen = fopen($url,"r");

    $homepage = file_get_contents($url);
    fclose($fopen);
echo mb_strlen($homepage, '8bit');

Розмір файлу чи довжину рядка?